diff --git a/.env.testing b/.env.testing index 5cf7f5144..d5e8caba1 100644 --- a/.env.testing +++ b/.env.testing @@ -9,5 +9,5 @@ MAIL_PORT=587 MAIL_USERNAME=ff538f0e1037f4 MAIL_PASSWORD=c04c81145fcb73 MAIL_ENCRYPTION=tls -MAIL_FROM_ADDRESS="admin@crater.com" +MAIL_FROM_ADDRESS="admin@craterapp.com" MAIL_FROM_NAME="John Doe" diff --git a/.eslintrc.js b/.eslintrc.js index 47398d0ce..6f9abf3a4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,20 +1,14 @@ +// .eslintrc.js + module.exports = { - root: true, - env: { - node: true, - }, extends: [ - 'plugin:vue/recommended', - 'eslint:recommended', - 'prettier/vue', - 'plugin:prettier/recommended', + // add more generic rulesets here, such as: + // 'eslint:recommended', + "plugin:vue/vue3-recommended", + "prettier", ], - parserOptions: { - parser: 'babel-eslint', - }, - plugins: ['prettier'], rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + // override/add rules settings here, such as: + // 'vue/no-unused-vars': 'error' }, -} +}; diff --git a/.gitignore b/.gitignore index 0839fd1c1..1ec6614a3 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,4 @@ Homestead.yaml .rnd /.expo /.vscode -/docker-compose/db/data/ \ No newline at end of file +/docker-compose/db/data/ diff --git a/Dockerfile b/Dockerfile index a073e2e2b..53c45f3ae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,40 +1,44 @@ -FROM php:7.4-fpm +FROM php:7.4-fpm-alpine -# Arguments defined in docker-compose.yml -ARG user -ARG uid - -# Install system dependencies -RUN apt-get update && apt-get install -y \ - git \ - curl \ - libpng-dev \ - libonig-dev \ - libxml2-dev \ - zip \ - unzip \ - libzip-dev \ - libmagickwand-dev \ - mariadb-client - -# Clear cache -RUN apt-get clean && rm -rf /var/lib/apt/lists/* - -RUN pecl install imagick \ - && docker-php-ext-enable imagick - -# Install PHP extensions -RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd - -# Get latest Composer -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer - -# Create system user to run Composer and Artisan Commands -RUN useradd -G www-data,root -u $uid -d /home/$user $user -RUN mkdir -p /home/$user/.composer && \ - chown -R $user:$user /home/$user - -# Set working directory WORKDIR /var/www -USER $user +RUN apk add --no-cache \ + $PHPIZE_DEPS \ + freetype-dev \ + git \ + zip \ + libzip-dev \ + php7-bcmath \ + curl \ + unzip \ + libjpeg-turbo-dev \ + libpng-dev \ + libxml2-dev \ + mariadb-client \ + sqlite \ + php7-json \ + php7-openssl \ + php7-pdo \ + php7-pdo_mysql \ + php7-session \ + php7-simplexml \ + php7-tokenizer \ + php7-xml \ + imagemagick \ + imagemagick-libs \ + imagemagick-dev \ + php7-imagick \ + php7-pcntl \ + --repository http://dl-cdn.alpinelinux.org/alpine/v3.13/community/ gnu-libiconv=1.15-r3 + +ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php + +RUN printf "\n" | pecl install \ + imagick && \ + docker-php-ext-enable --ini-name 20-imagick.ini imagick + +RUN docker-php-ext-configure zip +RUN docker-php-ext-install zip +RUN docker-php-ext-install iconv pdo pdo_mysql bcmath pcntl exif +RUN docker-php-ext-configure gd --with-jpeg --with-freetype +RUN docker-php-ext-install gd diff --git a/app/Console/Commands/CreateTemplateCommand.php b/app/Console/Commands/CreateTemplateCommand.php index f7b75dbeb..704f2a559 100644 --- a/app/Console/Commands/CreateTemplateCommand.php +++ b/app/Console/Commands/CreateTemplateCommand.php @@ -52,7 +52,7 @@ public function handle() } Storage::disk('views')->copy("/app/pdf/{$type}/{$type}1.blade.php", "/app/pdf/{$type}/{$templateName}.blade.php"); - copy(public_path("/assets/img/PDF/{$type}1.png"), public_path("/assets/img/PDF/{$templateName}.png")); + copy(resource_path("/static/img/PDF/{$type}1.png"), resource_path("/static/img/PDF/{$templateName}.png")); $path = resource_path("app/pdf/{$type}/{$templateName}.blade.php"); $type = ucfirst($type); diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 8eeedc428..555c59528 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -2,6 +2,7 @@ namespace Crater\Console; +use Crater\Models\RecurringInvoice; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; @@ -31,6 +32,13 @@ protected function schedule(Schedule $schedule) $schedule->command('check:estimates:status') ->daily(); + + $recurringInvoices = RecurringInvoice::where('status', 'ACTIVE')->get(); + foreach ($recurringInvoices as $recurringInvoice) { + $schedule->call(function () use ($recurringInvoice) { + $recurringInvoice->generateInvoice(); + })->cron($recurringInvoice->frequency); + } } /** diff --git a/app/Http/Controllers/V1/Auth/ConfirmPasswordController.php b/app/Http/Controllers/V1/Admin/Auth/ConfirmPasswordController.php similarity index 95% rename from app/Http/Controllers/V1/Auth/ConfirmPasswordController.php rename to app/Http/Controllers/V1/Admin/Auth/ConfirmPasswordController.php index b038c680c..5c9cb0343 100644 --- a/app/Http/Controllers/V1/Auth/ConfirmPasswordController.php +++ b/app/Http/Controllers/V1/Admin/Auth/ConfirmPasswordController.php @@ -1,6 +1,6 @@ middleware('guest')->except('logout'); + } +} diff --git a/app/Http/Controllers/V1/Auth/RegisterController.php b/app/Http/Controllers/V1/Admin/Auth/RegisterController.php similarity index 97% rename from app/Http/Controllers/V1/Auth/RegisterController.php rename to app/Http/Controllers/V1/Admin/Auth/RegisterController.php index e85ea3d21..596723173 100644 --- a/app/Http/Controllers/V1/Auth/RegisterController.php +++ b/app/Http/Controllers/V1/Admin/Auth/RegisterController.php @@ -1,6 +1,6 @@ authorize('manage backups'); + $configuredBackupDisks = config('backup.backup.destination.disks'); try { @@ -62,6 +64,8 @@ public function index(Request $request) */ public function store(Request $request) { + $this->authorize('manage backups'); + dispatch(new CreateBackupJob($request->all()))->onQueue(config('backup.queue.name')); return $this->respondSuccess(); @@ -75,6 +79,8 @@ public function store(Request $request) */ public function destroy($disk, Request $request) { + $this->authorize('manage backups'); + $validated = $request->validate([ 'path' => ['required', new PathToZip()], ]); diff --git a/app/Http/Controllers/V1/Backup/DownloadBackupController.php b/app/Http/Controllers/V1/Admin/Backup/DownloadBackupController.php similarity index 94% rename from app/Http/Controllers/V1/Backup/DownloadBackupController.php rename to app/Http/Controllers/V1/Admin/Backup/DownloadBackupController.php index 8ea0162b7..734c74ee1 100644 --- a/app/Http/Controllers/V1/Backup/DownloadBackupController.php +++ b/app/Http/Controllers/V1/Admin/Backup/DownloadBackupController.php @@ -2,7 +2,7 @@ // Implementation taken from nova-backup-tool - https://github.com/spatie/nova-backup-tool/ -namespace Crater\Http\Controllers\V1\Backup; +namespace Crater\Http\Controllers\V1\Admin\Backup; use Crater\Rules\Backup\PathToZip; use Illuminate\Http\Request; @@ -15,6 +15,8 @@ class DownloadBackupController extends ApiController { public function __invoke(Request $request) { + $this->authorize('manage backups'); + $validated = $request->validate([ 'path' => ['required', new PathToZip()], ]); diff --git a/app/Http/Controllers/V1/Admin/Company/CompaniesController.php b/app/Http/Controllers/V1/Admin/Company/CompaniesController.php new file mode 100644 index 000000000..55f4353b3 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Company/CompaniesController.php @@ -0,0 +1,85 @@ +authorize('create company'); + + $user = $request->user(); + + $company = Company::create($request->getCompanyPayload()); + $company->unique_hash = Hashids::connection(Company::class)->encode($company->id); + $company->save(); + $company->setupDefaultData(); + $user->companies()->attach($company->id); + $user->assign('super admin'); + + if ($request->address) { + $company->address()->create($request->address); + } + + return new CompanyResource($company); + } + + public function destroy(Request $request) + { + $company = Company::find($request->header('company')); + + $this->authorize('delete company', $company); + + $user = $request->user(); + + if ($request->name !== $company->name) { + return respondJson('company_name_must_match_with_given_name', 'Company name must match with given name'); + } + + if ($user->loadCount('companies')->companies_count <= 1) { + return respondJson('You_cannot_delete_all_companies', 'You cannot delete all companies'); + } + + $company->deleteCompany($user); + + return response()->json([ + 'success' => true + ]); + } + + public function transferOwnership(Request $request, User $user) + { + $company = Company::find($request->header('company')); + $this->authorize('transfer company ownership', $company); + + if ($user->hasCompany($company->id)) { + return response()->json([ + 'success' => false, + 'message' => 'User does not belongs to this company.' + ]); + } + + $company->update(['owner_id' => $user->id]); + BouncerFacade::sync($user)->roles(['super admin']); + + return response()->json([ + 'success' => true + ]); + } + + public function getUserCompanies(Request $request) + { + $companies = $request->user()->companies; + + return CompanyResource::collection($companies); + } +} diff --git a/app/Http/Controllers/V1/Admin/Company/CompanyController.php b/app/Http/Controllers/V1/Admin/Company/CompanyController.php new file mode 100644 index 000000000..7c6893d42 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Company/CompanyController.php @@ -0,0 +1,24 @@ +header('company')); + + return new CompanyResource($company); + } +} diff --git a/app/Http/Controllers/V1/General/FiscalYearsController.php b/app/Http/Controllers/V1/Admin/Config/FiscalYearsController.php similarity index 89% rename from app/Http/Controllers/V1/General/FiscalYearsController.php rename to app/Http/Controllers/V1/Admin/Config/FiscalYearsController.php index 65d74ad7d..4a77f63e9 100644 --- a/app/Http/Controllers/V1/General/FiscalYearsController.php +++ b/app/Http/Controllers/V1/Admin/Config/FiscalYearsController.php @@ -1,6 +1,6 @@ json([ + 'retrospective_edits' => config('crater.retrospective_edits'), + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/CustomField/CustomFieldsController.php b/app/Http/Controllers/V1/Admin/CustomField/CustomFieldsController.php new file mode 100644 index 000000000..273fe9d14 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/CustomField/CustomFieldsController.php @@ -0,0 +1,96 @@ +authorize('viewAny', CustomField::class); + + $limit = $request->has('limit') ? $request->limit : 5; + + $customFields = CustomField::applyFilters($request->all()) + ->whereCompany() + ->latest() + ->paginateData($limit); + + return CustomFieldResource::collection($customFields); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\CustomFieldRequest $request + * @return \Illuminate\Http\Response + */ + public function store(CustomFieldRequest $request) + { + $this->authorize('create', CustomField::class); + + $customField = CustomField::createCustomField($request); + + return new CustomFieldResource($customField); + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show(CustomField $customField) + { + $this->authorize('view', $customField); + + return new CustomFieldResource($customField); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(CustomFieldRequest $request, CustomField $customField) + { + $this->authorize('update', $customField); + + $customField->updateCustomField($request); + + return new CustomFieldResource($customField); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy(CustomField $customField) + { + $this->authorize('delete', $customField); + + if ($customField->customFieldValues()->exists()) { + $customField->customFieldValues()->delete(); + } + + $customField->forceDelete(); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Customer/CustomerStatsController.php b/app/Http/Controllers/V1/Admin/Customer/CustomerStatsController.php new file mode 100644 index 000000000..1d2c0415a --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Customer/CustomerStatsController.php @@ -0,0 +1,142 @@ +authorize('view', $customer); + + $i = 0; + $months = []; + $invoiceTotals = []; + $expenseTotals = []; + $receiptTotals = []; + $netProfits = []; + $monthCounter = 0; + $fiscalYear = CompanySetting::getSetting('fiscal_year', $request->header('company')); + $startDate = Carbon::now(); + $start = Carbon::now(); + $end = Carbon::now(); + $terms = explode('-', $fiscalYear); + + if ($terms[0] <= $start->month) { + $startDate->month($terms[0])->startOfMonth(); + $start->month($terms[0])->startOfMonth(); + $end->month($terms[0])->endOfMonth(); + } else { + $startDate->subYear()->month($terms[0])->startOfMonth(); + $start->subYear()->month($terms[0])->startOfMonth(); + $end->subYear()->month($terms[0])->endOfMonth(); + } + + if ($request->has('previous_year')) { + $startDate->subYear()->startOfMonth(); + $start->subYear()->startOfMonth(); + $end->subYear()->endOfMonth(); + } + while ($monthCounter < 12) { + array_push( + $invoiceTotals, + Invoice::whereBetween( + 'invoice_date', + [$start->format('Y-m-d'), $end->format('Y-m-d')] + ) + ->whereCompany() + ->whereCustomer($customer->id) + ->sum('total') ?? 0 + ); + array_push( + $expenseTotals, + Expense::whereBetween( + 'expense_date', + [$start->format('Y-m-d'), $end->format('Y-m-d')] + ) + ->whereCompany() + ->whereUser($customer->id) + ->sum('amount') ?? 0 + ); + array_push( + $receiptTotals, + Payment::whereBetween( + 'payment_date', + [$start->format('Y-m-d'), $end->format('Y-m-d')] + ) + ->whereCompany() + ->whereCustomer($customer->id) + ->sum('amount') ?? 0 + ); + array_push( + $netProfits, + ($receiptTotals[$i] - $expenseTotals[$i]) + ); + $i++; + array_push($months, $start->format('M')); + $monthCounter++; + $end->startOfMonth(); + $start->addMonth()->startOfMonth(); + $end->addMonth()->endOfMonth(); + } + + $start->subMonth()->endOfMonth(); + + $salesTotal = Invoice::whereBetween( + 'invoice_date', + [$startDate->format('Y-m-d'), $start->format('Y-m-d')] + ) + ->whereCompany() + ->whereCustomer($customer->id) + ->sum('total'); + $totalReceipts = Payment::whereBetween( + 'payment_date', + [$startDate->format('Y-m-d'), $start->format('Y-m-d')] + ) + ->whereCompany() + ->whereCustomer($customer->id) + ->sum('amount'); + $totalExpenses = Expense::whereBetween( + 'expense_date', + [$startDate->format('Y-m-d'), $start->format('Y-m-d')] + ) + ->whereCompany() + ->whereUser($customer->id) + ->sum('amount'); + $netProfit = (int) $totalReceipts - (int) $totalExpenses; + + $chartData = [ + 'months' => $months, + 'invoiceTotals' => $invoiceTotals, + 'expenseTotals' => $expenseTotals, + 'receiptTotals' => $receiptTotals, + 'netProfit' => $netProfit, + 'netProfits' => $netProfits, + 'salesTotal' => $salesTotal, + 'totalReceipts' => $totalReceipts, + 'totalExpenses' => $totalExpenses, + ]; + + $customer = Customer::find($customer->id); + + return (new CustomerResource($customer)) + ->additional(['meta' => [ + 'chartData' => $chartData + ]]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Customer/CustomersController.php b/app/Http/Controllers/V1/Admin/Customer/CustomersController.php new file mode 100644 index 000000000..55a011d3f --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Customer/CustomersController.php @@ -0,0 +1,108 @@ +authorize('viewAny', Customer::class); + + $limit = $request->has('limit') ? $request->limit : 10; + + $customers = Customer::with('creator') + ->whereCompany() + ->applyFilters($request->all()) + ->select( + 'customers.*', + DB::raw('sum(invoices.base_due_amount) as base_due_amount'), + DB::raw('sum(invoices.due_amount) as due_amount'), + ) + ->groupBy('customers.id') + ->leftJoin('invoices', 'customers.id', '=', 'invoices.customer_id') + ->paginateData($limit); + + return (CustomerResource::collection($customers)) + ->additional(['meta' => [ + 'customer_total_count' => Customer::whereCompany()->count(), + ]]); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function store(Requests\CustomerRequest $request) + { + $this->authorize('create', Customer::class); + + $customer = Customer::createCustomer($request); + + return new CustomerResource($customer); + } + + /** + * Display the specified resource. + * + * @param Customer $customer + * @return \Illuminate\Http\JsonResponse + */ + public function show(Customer $customer) + { + $this->authorize('view', $customer); + + return new CustomerResource($customer); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Crater\Models\Customer $customer + * @return \Illuminate\Http\JsonResponse + */ + public function update(Requests\CustomerRequest $request, Customer $customer) + { + $this->authorize('update', $customer); + + $customer = Customer::updateCustomer($request, $customer); + + if (is_string($customer)) { + return respondJson('you_cannot_edit_currency', 'Cannot change currency once transactions created'); + } + + return new CustomerResource($customer); + } + + /** + * Remove a list of Customers along side all their resources (ie. Estimates, Invoices, Payments and Addresses) + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function delete(DeleteCustomersRequest $request) + { + $this->authorize('delete multiple customers'); + + Customer::deleteCustomers($request->ids); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Dashboard/DashboardController.php b/app/Http/Controllers/V1/Admin/Dashboard/DashboardController.php new file mode 100644 index 000000000..64b66f82a --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Dashboard/DashboardController.php @@ -0,0 +1,165 @@ +header('company')); + + $this->authorize('view dashboard', $company); + + $invoice_totals = []; + $expense_totals = []; + $receipt_totals = []; + $net_income_totals = []; + + $i = 0; + $months = []; + $monthCounter = 0; + $fiscalYear = CompanySetting::getSetting('fiscal_year', $request->header('company')); + $startDate = Carbon::now(); + $start = Carbon::now(); + $end = Carbon::now(); + $terms = explode('-', $fiscalYear); + + if ($terms[0] <= $start->month) { + $startDate->month($terms[0])->startOfMonth(); + $start->month($terms[0])->startOfMonth(); + $end->month($terms[0])->endOfMonth(); + } else { + $startDate->subYear()->month($terms[0])->startOfMonth(); + $start->subYear()->month($terms[0])->startOfMonth(); + $end->subYear()->month($terms[0])->endOfMonth(); + } + + if ($request->has('previous_year')) { + $startDate->subYear()->startOfMonth(); + $start->subYear()->startOfMonth(); + $end->subYear()->endOfMonth(); + } + + while ($monthCounter < 12) { + array_push( + $invoice_totals, + Invoice::whereBetween( + 'invoice_date', + [$start->format('Y-m-d'), $end->format('Y-m-d')] + ) + ->whereCompany() + ->sum('base_total') + ); + array_push( + $expense_totals, + Expense::whereBetween( + 'expense_date', + [$start->format('Y-m-d'), $end->format('Y-m-d')] + ) + ->whereCompany() + ->sum('base_amount') + ); + array_push( + $receipt_totals, + Payment::whereBetween( + 'payment_date', + [$start->format('Y-m-d'), $end->format('Y-m-d')] + ) + ->whereCompany() + ->sum('base_amount') + ); + array_push( + $net_income_totals, + ($receipt_totals[$i] - $expense_totals[$i]) + ); + $i++; + array_push($months, $start->format('M')); + $monthCounter++; + $end->startOfMonth(); + $start->addMonth()->startOfMonth(); + $end->addMonth()->endOfMonth(); + } + + $start->subMonth()->endOfMonth(); + + $total_sales = Invoice::whereBetween( + 'invoice_date', + [$startDate->format('Y-m-d'), $start->format('Y-m-d')] + ) + ->whereCompany() + ->sum('base_total'); + + $total_receipts = Payment::whereBetween( + 'payment_date', + [$startDate->format('Y-m-d'), $start->format('Y-m-d')] + ) + ->whereCompany() + ->sum('base_amount'); + + $total_expenses = Expense::whereBetween( + 'expense_date', + [$startDate->format('Y-m-d'), $start->format('Y-m-d')] + ) + ->whereCompany() + ->sum('base_amount'); + + $total_net_income = (int)$total_receipts - (int)$total_expenses; + + $chart_data = [ + 'months' => $months, + 'invoice_totals' => $invoice_totals, + 'expense_totals' => $expense_totals, + 'receipt_totals' => $receipt_totals, + 'net_income_totals' => $net_income_totals, + ]; + + $total_customer_count = Customer::whereCompany()->count(); + $total_invoice_count = Invoice::whereCompany() + ->count(); + $total_estimate_count = Estimate::whereCompany()->count(); + $total_amount_due = Invoice::whereCompany() + ->sum('base_due_amount'); + + $recent_due_invoices = Invoice::with('customer') + ->whereCompany() + ->where('base_due_amount', '>', 0) + ->take(5) + ->latest() + ->get(); + $recent_estimates = Estimate::with('customer')->whereCompany()->take(5)->latest()->get(); + + return response()->json([ + 'total_amount_due' => $total_amount_due, + 'total_customer_count' => $total_customer_count, + 'total_invoice_count' => $total_invoice_count, + 'total_estimate_count' => $total_estimate_count, + + 'recent_due_invoices' => $recent_due_invoices, + 'recent_estimates' => $recent_estimates, + + 'chart_data' => $chart_data, + + 'total_sales' => $total_sales, + 'total_receipts' => $total_receipts, + 'total_expenses' => $total_expenses, + 'total_net_income' => $total_net_income, + ]); + } +} diff --git a/app/Http/Controllers/V1/Estimate/ChangeEstimateStatusController.php b/app/Http/Controllers/V1/Admin/Estimate/ChangeEstimateStatusController.php similarity index 83% rename from app/Http/Controllers/V1/Estimate/ChangeEstimateStatusController.php rename to app/Http/Controllers/V1/Admin/Estimate/ChangeEstimateStatusController.php index 9da6b8a06..0e429acd3 100644 --- a/app/Http/Controllers/V1/Estimate/ChangeEstimateStatusController.php +++ b/app/Http/Controllers/V1/Admin/Estimate/ChangeEstimateStatusController.php @@ -1,6 +1,6 @@ authorize('send estimate', $estimate); + $estimate->update($request->only('status')); return response()->json([ diff --git a/app/Http/Controllers/V1/Admin/Estimate/ConvertEstimateController.php b/app/Http/Controllers/V1/Admin/Estimate/ConvertEstimateController.php new file mode 100644 index 000000000..e9282b6f4 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Estimate/ConvertEstimateController.php @@ -0,0 +1,132 @@ +authorize('create', Invoice::class); + + $estimate->load(['items', 'items.taxes', 'customer', 'taxes']); + + $invoice_date = Carbon::now(); + $due_date = null; + + $dueDateEnabled = CompanySetting::getSetting( + 'invoice_set_due_date_automatically', + $request->header('company') + ); + + if ($dueDateEnabled === 'YES') { + $dueDateDays = CompanySetting::getSetting( + 'invoice_due_date_days', + $request->header('company') + ); + $due_date = Carbon::now()->addDays($dueDateDays)->format('Y-m-d'); + } + + $serial = (new SerialNumberFormatter()) + ->setModel($invoice) + ->setCompany($estimate->company_id) + ->setCustomer($estimate->customer_id) + ->setNextNumbers(); + + $templateName = $estimate->getInvoiceTemplateName(); + + $exchange_rate = $estimate->exchange_rate; + + $invoice = Invoice::create([ + 'creator_id' => Auth::id(), + 'invoice_date' => $invoice_date->format('Y-m-d'), + 'due_date' => $due_date, + 'invoice_number' => $serial->getNextNumber(), + 'sequence_number' => $serial->nextSequenceNumber, + 'customer_sequence_number' => $serial->nextCustomerSequenceNumber, + 'reference_number' => $serial->getNextNumber(), + 'customer_id' => $estimate->customer_id, + 'company_id' => $request->header('company'), + 'template_name' => $templateName, + 'status' => Invoice::STATUS_DRAFT, + 'paid_status' => Invoice::STATUS_UNPAID, + 'sub_total' => $estimate->sub_total, + 'discount' => $estimate->discount, + 'discount_type' => $estimate->discount_type, + 'discount_val' => $estimate->discount_val, + 'total' => $estimate->total, + 'due_amount' => $estimate->total, + 'tax_per_item' => $estimate->tax_per_item, + 'discount_per_item' => $estimate->discount_per_item, + 'tax' => $estimate->tax, + 'notes' => $estimate->notes, + 'exchange_rate' => $exchange_rate, + 'base_discount_val' => $estimate->discount_val * $exchange_rate, + 'base_sub_total' => $estimate->sub_total * $exchange_rate, + 'base_total' => $estimate->total * $exchange_rate, + 'base_tax' => $estimate->tax * $exchange_rate, + 'currency_id' => $estimate->currency_id, + ]); + + $invoice->unique_hash = Hashids::connection(Invoice::class)->encode($invoice->id); + $invoice->save(); + $invoiceItems = $estimate->items->toArray(); + + foreach ($invoiceItems as $invoiceItem) { + $invoiceItem['company_id'] = $request->header('company'); + $invoiceItem['name'] = $invoiceItem['name']; + $estimateItem['exchange_rate'] = $exchange_rate; + $estimateItem['base_price'] = $invoiceItem['price'] * $exchange_rate; + $estimateItem['base_discount_val'] = $invoiceItem['discount_val'] * $exchange_rate; + $estimateItem['base_tax'] = $invoiceItem['tax'] * $exchange_rate; + $estimateItem['base_total'] = $invoiceItem['total'] * $exchange_rate; + + $item = $invoice->items()->create($invoiceItem); + + if (array_key_exists('taxes', $invoiceItem) && $invoiceItem['taxes']) { + foreach ($invoiceItem['taxes'] as $tax) { + $tax['company_id'] = $request->header('company'); + + if ($tax['amount']) { + $item->taxes()->create($tax); + } + } + } + } + + if ($estimate->taxes) { + foreach ($estimate->taxes->toArray() as $tax) { + $tax['company_id'] = $request->header('company'); + $tax['exchange_rate'] = $exchange_rate; + $tax['base_amount'] = $tax['amount'] * $exchange_rate; + $tax['currency_id'] = $estimate->currency_id; + unset($tax['estimate_id']); + + $invoice->taxes()->create($tax); + } + } + + $estimate->checkForEstimateConvertAction(); + + $invoice = Invoice::find($invoice->id); + + return new InvoiceResource($invoice); + } +} diff --git a/app/Http/Controllers/V1/Admin/Estimate/EstimateTemplatesController.php b/app/Http/Controllers/V1/Admin/Estimate/EstimateTemplatesController.php new file mode 100644 index 000000000..ea6adbe94 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Estimate/EstimateTemplatesController.php @@ -0,0 +1,27 @@ +authorize('viewAny', Estimate::class); + + $estimateTemplates = Estimate::estimateTemplates(); + + return response()->json([ + 'estimateTemplates' => $estimateTemplates + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Estimate/EstimatesController.php b/app/Http/Controllers/V1/Admin/Estimate/EstimatesController.php new file mode 100644 index 000000000..e43a4be60 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Estimate/EstimatesController.php @@ -0,0 +1,77 @@ +authorize('viewAny', Estimate::class); + + $limit = $request->has('limit') ? $request->limit : 10; + + $estimates = Estimate::whereCompany() + ->join('customers', 'customers.id', '=', 'estimates.customer_id') + ->applyFilters($request->all()) + ->select('estimates.*', 'customers.name') + ->latest() + ->paginateData($limit); + + return (EstimateResource::collection($estimates)) + ->additional(['meta' => [ + 'estimate_total_count' => Estimate::whereCompany()->count(), + ]]); + } + + public function store(EstimatesRequest $request) + { + $this->authorize('create', Estimate::class); + + $estimate = Estimate::createEstimate($request); + + if ($request->has('estimateSend')) { + $estimate->send($request->title, $request->body); + } + + GenerateEstimatePdfJob::dispatch($estimate); + + return new EstimateResource($estimate); + } + + public function show(Request $request, Estimate $estimate) + { + $this->authorize('view', $estimate); + + return new EstimateResource($estimate); + } + + public function update(EstimatesRequest $request, Estimate $estimate) + { + $this->authorize('update', $estimate); + + $estimate = $estimate->updateEstimate($request); + + GenerateEstimatePdfJob::dispatch($estimate, true); + + return new EstimateResource($estimate); + } + + public function delete(DeleteEstimatesRequest $request) + { + $this->authorize('delete multiple estimates'); + + Estimate::destroy($request->ids); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Estimate/SendEstimateController.php b/app/Http/Controllers/V1/Admin/Estimate/SendEstimateController.php similarity index 83% rename from app/Http/Controllers/V1/Estimate/SendEstimateController.php rename to app/Http/Controllers/V1/Admin/Estimate/SendEstimateController.php index ffa8c80a8..4e9c82335 100644 --- a/app/Http/Controllers/V1/Estimate/SendEstimateController.php +++ b/app/Http/Controllers/V1/Admin/Estimate/SendEstimateController.php @@ -1,6 +1,6 @@ authorize('send estimate', $estimate); + $response = $estimate->send($request->all()); return response()->json($response); diff --git a/app/Http/Controllers/V1/Admin/Estimate/SendEstimatePreviewController.php b/app/Http/Controllers/V1/Admin/Estimate/SendEstimatePreviewController.php new file mode 100644 index 000000000..dba09e6b6 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Estimate/SendEstimatePreviewController.php @@ -0,0 +1,26 @@ +authorize('send estimate', $estimate); + + $markdown = new Markdown(view(), config('mail.markdown')); + + return $markdown->render('emails.send.estimate', ['data' => $estimate->sendEstimateData($request->all())]); + } +} diff --git a/app/Http/Controllers/V1/Admin/ExchangeRate/ExchangeRateProviderController.php b/app/Http/Controllers/V1/Admin/ExchangeRate/ExchangeRateProviderController.php new file mode 100644 index 000000000..04bfc4011 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/ExchangeRate/ExchangeRateProviderController.php @@ -0,0 +1,117 @@ +authorize('viewAny', ExchangeRateProvider::class); + + $limit = $request->has('limit') ? $request->limit : 5; + + $exchangeRateProviders = ExchangeRateProvider::whereCompany()->paginate($limit); + + return ExchangeRateProviderResource::collection($exchangeRateProviders); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(ExchangeRateProviderRequest $request) + { + $this->authorize('create', ExchangeRateProvider::class); + + $query = ExchangeRateProvider::checkActiveCurrencies($request); + + if (count($query) !== 0) { + return respondJson('currency_used', 'Currency used.'); + } + + $checkConverterApi = ExchangeRateProvider::checkExchangeRateProviderStatus($request); + + if ($checkConverterApi->status() == 200) { + $exchangeRateProvider = ExchangeRateProvider::createFromRequest($request); + + return new ExchangeRateProviderResource($exchangeRateProvider); + } + + return $checkConverterApi; + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\ExchangeRateProvider $exchangeRateProvider + * @return \Illuminate\Http\Response + */ + public function show(ExchangeRateProvider $exchangeRateProvider) + { + $this->authorize('view', $exchangeRateProvider); + + return new ExchangeRateProviderResource($exchangeRateProvider); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Crater\Models\ExchangeRateProvider $exchangeRateProvider + * @return \Illuminate\Http\Response + */ + public function update(ExchangeRateProviderRequest $request, ExchangeRateProvider $exchangeRateProvider) + { + $this->authorize('update', $exchangeRateProvider); + + $query = $exchangeRateProvider->checkUpdateActiveCurrencies($request); + + if (count($query) !== 0) { + return respondJson('currency_used', 'Currency used.'); + } + + $checkConverterApi = ExchangeRateProvider::checkExchangeRateProviderStatus($request); + + if ($checkConverterApi->status() == 200) { + $exchangeRateProvider->updateFromRequest($request); + + return new ExchangeRateProviderResource($exchangeRateProvider); + } + + return $checkConverterApi; + } + + /** + * Remove the specified resource from storage. + * + * @param \Crater\Models\ExchangeRateProvider $exchangeRateProvider + * @return \Illuminate\Http\Response + */ + public function destroy(ExchangeRateProvider $exchangeRateProvider) + { + $this->authorize('delete', $exchangeRateProvider); + + if ($exchangeRateProvider->active == true) { + return respondJson('provider_active', 'Provider Active.'); + } + + $exchangeRateProvider->delete(); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/ExchangeRate/GetActiveProviderController.php b/app/Http/Controllers/V1/Admin/ExchangeRate/GetActiveProviderController.php new file mode 100644 index 000000000..5c174625a --- /dev/null +++ b/app/Http/Controllers/V1/Admin/ExchangeRate/GetActiveProviderController.php @@ -0,0 +1,35 @@ +whereJsonContains('currencies', $currency->code) + ->where('active', true) + ->get(); + + if (count($query) !== 0) { + return response()->json([ + 'success' => true, + 'message' => 'provider_active', + ], 200); + } + + return response()->json([ + 'error' => 'no_active_provider', + ], 200); + } +} diff --git a/app/Http/Controllers/V1/Admin/ExchangeRate/GetExchangeRateController.php b/app/Http/Controllers/V1/Admin/ExchangeRate/GetExchangeRateController.php new file mode 100644 index 000000000..b5820bbb3 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/ExchangeRate/GetExchangeRateController.php @@ -0,0 +1,57 @@ +header('company')); + $baseCurrency = Currency::findOrFail($settings['currency']); + + $query = ExchangeRateProvider::whereJsonContains('currencies', $currency->code) + ->where('active', true) + ->get() + ->toArray(); + + $exchange_rate = ExchangeRateLog::where('base_currency_id', $currency->id) + ->where('currency_id', $baseCurrency->id) + ->orderBy('created_at', 'desc') + ->value('exchange_rate'); + + if ($query) { + $filter = Arr::only($query[0], ['key', 'driver', 'driver_config']); + $exchange_rate_value = $this->getExchangeRate($filter, $currency->code, $baseCurrency->code); + + if ($exchange_rate_value->status() == 200) { + return $exchange_rate_value; + } + } + if ($exchange_rate) { + return response()->json([ + 'exchangeRate' => [$exchange_rate], + ], 200); + } + + return response()->json([ + 'error' => 'no_exchange_rate_available', + ], 200); + } +} diff --git a/app/Http/Controllers/V1/Admin/ExchangeRate/GetSupportedCurrenciesController.php b/app/Http/Controllers/V1/Admin/ExchangeRate/GetSupportedCurrenciesController.php new file mode 100644 index 000000000..af80f259c --- /dev/null +++ b/app/Http/Controllers/V1/Admin/ExchangeRate/GetSupportedCurrenciesController.php @@ -0,0 +1,26 @@ +authorize('viewAny', ExchangeRateProvider::class); + + return $this->getSupportedCurrencies($request); + } +} diff --git a/app/Http/Controllers/V1/Admin/ExchangeRate/GetUsedCurrenciesController.php b/app/Http/Controllers/V1/Admin/ExchangeRate/GetUsedCurrenciesController.php new file mode 100644 index 000000000..84545c140 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/ExchangeRate/GetUsedCurrenciesController.php @@ -0,0 +1,55 @@ +authorize('viewAny', ExchangeRateProvider::class); + + $providerId = $request->provider_id; + + $activeExchangeRateProviders = ExchangeRateProvider::where('active', true) + ->whereCompany() + ->when($providerId, function ($query) use ($providerId) { + return $query->where('id', '<>', $providerId); + }) + ->pluck('currencies'); + $activeExchangeRateProvider = []; + + foreach ($activeExchangeRateProviders as $data) { + if (is_array($data)) { + for ($limit = 0; $limit < count($data); $limit++) { + $activeExchangeRateProvider[] = $data[$limit]; + } + } + } + + $allExchangeRateProviders = ExchangeRateProvider::whereCompany()->pluck('currencies'); + $allExchangeRateProvider = []; + + foreach ($allExchangeRateProviders as $data) { + if (is_array($data)) { + for ($limit = 0; $limit < count($data); $limit++) { + $allExchangeRateProvider[] = $data[$limit]; + } + } + } + + return response()->json([ + 'allUsedCurrencies' => $allExchangeRateProvider ? $allExchangeRateProvider : [], + 'activeUsedCurrencies' => $activeExchangeRateProvider ? $activeExchangeRateProvider : [], + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Expense/ExpenseCategoriesController.php b/app/Http/Controllers/V1/Admin/Expense/ExpenseCategoriesController.php new file mode 100644 index 000000000..6c4c5d89d --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Expense/ExpenseCategoriesController.php @@ -0,0 +1,96 @@ +authorize('viewAny', ExpenseCategory::class); + + $limit = $request->has('limit') ? $request->limit : 5; + + $categories = ExpenseCategory::applyFilters($request->all()) + ->whereCompany() + ->latest() + ->paginateData($limit); + + return ExpenseCategoryResource::collection($categories); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(ExpenseCategoryRequest $request) + { + $this->authorize('create', ExpenseCategory::class); + + $category = ExpenseCategory::create($request->getExpenseCategoryPayload()); + + return new ExpenseCategoryResource($category); + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\ExpenseCategory $category + * @return \Illuminate\Http\Response + */ + public function show(ExpenseCategory $category) + { + $this->authorize('view', $category); + + return new ExpenseCategoryResource($category); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Crater\Models\ExpenseCategory $ExpenseCategory + * @return \Illuminate\Http\Response + */ + public function update(ExpenseCategoryRequest $request, ExpenseCategory $category) + { + $this->authorize('update', $category); + + $category->update($request->getExpenseCategoryPayload()); + + return new ExpenseCategoryResource($category); + } + + /** + * Remove the specified resource from storage. + * + * @param \Crater\ExpensesCategory $category + * @return \Illuminate\Http\Response + */ + public function destroy(ExpenseCategory $category) + { + $this->authorize('delete', $category); + + if ($category->expenses() && $category->expenses()->count() > 0) { + return respondJson('expense_attached', 'Expense Attached'); + } + + $category->delete(); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Expense/ExpensesController.php b/app/Http/Controllers/V1/Admin/Expense/ExpensesController.php new file mode 100644 index 000000000..bcb94003e --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Expense/ExpensesController.php @@ -0,0 +1,93 @@ +authorize('viewAny', Expense::class); + + $limit = $request->has('limit') ? $request->limit : 10; + + $expenses = Expense::with('category', 'creator', 'fields') + ->whereCompany() + ->leftJoin('customers', 'customers.id', '=', 'expenses.customer_id') + ->join('expense_categories', 'expense_categories.id', '=', 'expenses.expense_category_id') + ->applyFilters($request->all()) + ->select('expenses.*', 'expense_categories.name', 'customers.name as user_name') + ->paginateData($limit); + + return (ExpenseResource::collection($expenses)) + ->additional(['meta' => [ + 'expense_total_count' => Expense::whereCompany()->count(), + ]]); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function store(ExpenseRequest $request) + { + $this->authorize('create', Expense::class); + + $expense = Expense::createExpense($request); + + return new ExpenseResource($expense); + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\Expense $expense + * @return \Illuminate\Http\JsonResponse + */ + public function show(Expense $expense) + { + $this->authorize('view', $expense); + + return new ExpenseResource($expense); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Crater\Models\Expense $expense + * @return \Illuminate\Http\JsonResponse + */ + public function update(ExpenseRequest $request, Expense $expense) + { + $this->authorize('update', $expense); + + $expense->updateExpense($request); + + return new ExpenseResource($expense); + } + + public function delete(DeleteExpensesRequest $request) + { + $this->authorize('delete multiple expenses'); + + Expense::destroy($request->ids); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Expense/ShowReceiptController.php b/app/Http/Controllers/V1/Admin/Expense/ShowReceiptController.php new file mode 100644 index 000000000..206b2c0f9 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Expense/ShowReceiptController.php @@ -0,0 +1,30 @@ +authorize('view', $expense); + + if ($expense) { + $media = $expense->getFirstMedia('receipts'); + + if ($media) { + return response()->file($media->getPath()); + } + + return respondJson('receipt_does_not_exist', 'Receipt does not exist.'); + } + } +} diff --git a/app/Http/Controllers/V1/Expense/UploadReceiptController.php b/app/Http/Controllers/V1/Admin/Expense/UploadReceiptController.php similarity index 83% rename from app/Http/Controllers/V1/Expense/UploadReceiptController.php rename to app/Http/Controllers/V1/Admin/Expense/UploadReceiptController.php index 8a238b6ab..cc7d6135c 100644 --- a/app/Http/Controllers/V1/Expense/UploadReceiptController.php +++ b/app/Http/Controllers/V1/Admin/Expense/UploadReceiptController.php @@ -1,6 +1,6 @@ authorize('update', $expense); + $data = json_decode($request->attachment_receipt); if ($data) { @@ -26,11 +28,11 @@ public function __invoke(Request $request, Expense $expense) $expense->addMediaFromBase64($data->data) ->usingFileName($data->name) - ->toMediaCollection('receipts', 'local'); + ->toMediaCollection('receipts'); } return response()->json([ 'success' => 'Expense receipts uploaded successfully', - ]); + ], 200); } } diff --git a/app/Http/Controllers/V1/Admin/General/BootstrapController.php b/app/Http/Controllers/V1/Admin/General/BootstrapController.php new file mode 100644 index 000000000..96719339b --- /dev/null +++ b/app/Http/Controllers/V1/Admin/General/BootstrapController.php @@ -0,0 +1,63 @@ +user(); + $current_user_settings = $current_user->getAllSettings(); + + $main_menu = $this->generateMenu('main_menu', $current_user); + + $setting_menu = $this->generateMenu('setting_menu', $current_user); + + $companies = $current_user->companies; + + $current_company = Company::find($request->header('company')); + + if ((! $current_company) || ($current_company && ! $current_user->hasCompany($current_company->id))) { + $current_company = $current_user->companies()->first(); + } + + $current_company_settings = CompanySetting::getAllSettings($current_company->id); + + $current_company_currency = $current_company_settings->has('currency') + ? Currency::find($current_company_settings->get('currency')) + : Currency::first(); + + BouncerFacade::refreshFor($current_user); + + return response()->json([ + 'current_user' => new UserResource($current_user), + 'current_user_settings' => $current_user_settings, + 'current_user_abilities' => $current_user->getAbilities(), + 'companies' => CompanyResource::collection($companies), + 'current_company' => new CompanyResource($current_company), + 'current_company_settings' => $current_company_settings, + 'current_company_currency' => $current_company_currency, + 'config' => config('crater'), + 'main_menu' => $main_menu, + 'setting_menu' => $setting_menu, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/General/BulkExchangeRateController.php b/app/Http/Controllers/V1/Admin/General/BulkExchangeRateController.php new file mode 100644 index 000000000..f0e82f66d --- /dev/null +++ b/app/Http/Controllers/V1/Admin/General/BulkExchangeRateController.php @@ -0,0 +1,128 @@ +header('company')); + + if ($bulkExchangeRate == 'NO') { + if ($request->currencies) { + foreach ($request->currencies as $currency) { + $currency['exchange_rate'] = $currency['exchange_rate'] ?? 1; + + $invoices = Invoice::where('currency_id', $currency['id'])->get(); + + if ($invoices) { + foreach ($invoices as $invoice) { + $invoice->update([ + 'exchange_rate' => $currency['exchange_rate'], + 'base_discount_val' => $invoice->sub_total * $currency['exchange_rate'], + 'base_sub_total' => $invoice->sub_total * $currency['exchange_rate'], + 'base_total' => $invoice->total * $currency['exchange_rate'], + 'base_tax' => $invoice->tax * $currency['exchange_rate'], + 'base_due_amount' => $invoice->due_amount * $currency['exchange_rate'] + ]); + + $this->items($invoice); + } + } + + $estimates = Estimate::where('currency_id', $currency['id'])->get(); + + if ($estimates) { + foreach ($estimates as $estimate) { + $estimate->update([ + 'exchange_rate' => $currency['exchange_rate'], + 'base_discount_val' => $estimate->sub_total * $currency['exchange_rate'], + 'base_sub_total' => $estimate->sub_total * $currency['exchange_rate'], + 'base_total' => $estimate->total * $currency['exchange_rate'], + 'base_tax' => $estimate->tax * $currency['exchange_rate'] + ]); + + $this->items($estimate); + } + } + + $taxes = Tax::where('currency_id', $currency['id'])->get(); + + if ($taxes) { + foreach ($taxes as $tax) { + $tax->base_amount = $tax->base_amount * $currency['exchange_rate']; + $tax->save(); + } + } + + $payments = Payment::where('currency_id', $currency['id'])->get(); + + if ($payments) { + foreach ($payments as $payment) { + $payment->exchange_rate = $currency['exchange_rate']; + $payment->base_amount = $payment->amount * $currency['exchange_rate']; + $payment->save(); + } + } + } + } + + $settings = [ + 'bulk_exchange_rate_configured' => 'YES' + ]; + + CompanySetting::setSettings($settings, $request->header('company')); + + return response()->json([ + 'success' => true + ]); + } + + return response()->json([ + 'error' => false + ]); + } + + public function items($model) + { + foreach ($model->items as $item) { + $item->update([ + 'exchange_rate' => $model->exchange_rate, + 'base_discount_val' => $item->discount_val * $model->exchange_rate, + 'base_price' => $item->price * $model->exchange_rate, + 'base_tax' => $item->tax * $model->exchange_rate, + 'base_total' => $item->total * $model->exchange_rate + ]); + + $this->taxes($item); + } + + $this->taxes($model); + } + + public function taxes($model) + { + if ($model->taxes()->exists()) { + $model->taxes->map(function ($tax) use ($model) { + $tax->update([ + 'exchange_rate' => $model->exchange_rate, + 'base_amount' => $tax->amount * $model->exchange_rate, + ]); + }); + } + } +} diff --git a/app/Http/Controllers/V1/Admin/General/ConfigController.php b/app/Http/Controllers/V1/Admin/General/ConfigController.php new file mode 100644 index 000000000..b0df1f628 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/General/ConfigController.php @@ -0,0 +1,22 @@ +json([ + $request->key => config('crater.'.$request->key), + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/General/CountriesController.php b/app/Http/Controllers/V1/Admin/General/CountriesController.php new file mode 100644 index 000000000..a6734db92 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/General/CountriesController.php @@ -0,0 +1,24 @@ +get(); + + return CurrencyResource::collection($currencies); + } +} diff --git a/app/Http/Controllers/V1/General/DateFormatsController.php b/app/Http/Controllers/V1/Admin/General/DateFormatsController.php similarity index 90% rename from app/Http/Controllers/V1/General/DateFormatsController.php rename to app/Http/Controllers/V1/Admin/General/DateFormatsController.php index 8d52fde96..5cd594f8b 100644 --- a/app/Http/Controllers/V1/General/DateFormatsController.php +++ b/app/Http/Controllers/V1/Admin/General/DateFormatsController.php @@ -1,6 +1,6 @@ pluck('currency_id')->toArray(); + + $taxes = Tax::where('exchange_rate', null)->pluck('currency_id')->toArray(); + + $estimates = Estimate::where('exchange_rate', null)->pluck('currency_id')->toArray(); + + $payments = Payment::where('exchange_rate', null)->pluck('currency_id')->toArray(); + + $currencies = array_merge($invoices, $taxes, $estimates, $payments); + + return response()->json([ + 'currencies' => Currency::whereIn('id', $currencies)->get() + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/General/NextNumberController.php b/app/Http/Controllers/V1/Admin/General/NextNumberController.php new file mode 100644 index 000000000..6f458e804 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/General/NextNumberController.php @@ -0,0 +1,66 @@ +key; + $nextNumber = null; + $serial = (new SerialNumberFormatter()) + ->setCompany($request->header('company')) + ->setCustomer($request->userId); + + try { + switch ($key) { + case 'invoice': + $nextNumber = $serial->setModel($invoice) + ->setModelObject($request->model_id) + ->getNextNumber(); + + break; + + case 'estimate': + $nextNumber = $serial->setModel($estimate) + ->setModelObject($request->model_id) + ->getNextNumber(); + + break; + + case 'payment': + $nextNumber = $serial->setModel($payment) + ->setModelObject($request->model_id) + ->getNextNumber(); + + break; + + default: + return; + } + } catch (\Exception $exception) { + return response()->json([ + 'success' => false, + 'message' => $exception->getMessage() + ]); + } + + return response()->json([ + 'success' => true, + 'nextNumber' => $nextNumber, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/General/NotesController.php b/app/Http/Controllers/V1/Admin/General/NotesController.php new file mode 100644 index 000000000..93858d35d --- /dev/null +++ b/app/Http/Controllers/V1/Admin/General/NotesController.php @@ -0,0 +1,92 @@ +authorize('view notes'); + + $limit = $request->limit ?? 10; + + $notes = Note::latest() + ->whereCompany() + ->applyFilters($request->all()) + ->paginate($limit); + + return NoteResource::collection($notes); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(NotesRequest $request) + { + $this->authorize('manage notes'); + + $note = Note::create($request->getNotesPayload()); + + return new NoteResource($note); + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\Note $note + * @return \Illuminate\Http\Response + */ + public function show(Note $note) + { + $this->authorize('view notes'); + + return new NoteResource($note); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Crater\Models\Note $note + * @return \Illuminate\Http\Response + */ + public function update(NotesRequest $request, Note $note) + { + $this->authorize('manage notes'); + + $note->update($request->getNotesPayload()); + + return new NoteResource($note); + } + + /** + * Remove the specified resource from storage. + * + * @param \Crater\Models\Note $note + * @return \Illuminate\Http\Response + */ + public function destroy(Note $note) + { + $this->authorize('manage notes'); + + $note->delete(); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/General/NumberPlaceholdersController.php b/app/Http/Controllers/V1/Admin/General/NumberPlaceholdersController.php new file mode 100644 index 000000000..888983727 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/General/NumberPlaceholdersController.php @@ -0,0 +1,30 @@ +format) { + $placeholders = SerialNumberFormatter::getPlaceholders($request->format); + } else { + $placeholders = []; + } + + return response()->json([ + 'success' => true, + 'placeholders' => $placeholders, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/General/SearchController.php b/app/Http/Controllers/V1/Admin/General/SearchController.php new file mode 100644 index 000000000..d29fe82d8 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/General/SearchController.php @@ -0,0 +1,37 @@ +user(); + + $customers = Customer::applyFilters($request->only(['search'])) + ->latest() + ->paginate(10); + + if ($user->isOwner()) { + $users = User::applyFilters($request->only(['search'])) + ->latest() + ->paginate(10); + } + + return response()->json([ + 'customers' => $customers, + 'users' => $users ?? [], + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/General/SearchUsersController.php b/app/Http/Controllers/V1/Admin/General/SearchUsersController.php new file mode 100644 index 000000000..098bb2c20 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/General/SearchUsersController.php @@ -0,0 +1,27 @@ +authorize('create', User::class); + + $users = User::whereEmail($request->email) + ->latest() + ->paginate(10); + + return response()->json(['users' => $users]); + } +} diff --git a/app/Http/Controllers/V1/General/TimezonesController.php b/app/Http/Controllers/V1/Admin/General/TimezonesController.php similarity index 89% rename from app/Http/Controllers/V1/General/TimezonesController.php rename to app/Http/Controllers/V1/Admin/General/TimezonesController.php index 930559182..f7a22435a 100644 --- a/app/Http/Controllers/V1/General/TimezonesController.php +++ b/app/Http/Controllers/V1/Admin/General/TimezonesController.php @@ -1,6 +1,6 @@ authorize('send invoice', $invoice); + if ($request->status == Invoice::STATUS_SENT) { $invoice->status = Invoice::STATUS_SENT; $invoice->sent = true; diff --git a/app/Http/Controllers/V1/Admin/Invoice/CloneInvoiceController.php b/app/Http/Controllers/V1/Admin/Invoice/CloneInvoiceController.php new file mode 100644 index 000000000..aaf1f7cfe --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Invoice/CloneInvoiceController.php @@ -0,0 +1,131 @@ +authorize('create', Invoice::class); + + $date = Carbon::now(); + + $serial = (new SerialNumberFormatter()) + ->setModel($invoice) + ->setCompany($invoice->company_id) + ->setCustomer($invoice->customer_id) + ->setNextNumbers(); + + $due_date = null; + $dueDateEnabled = CompanySetting::getSetting( + 'invoice_set_due_date_automatically', + $request->header('company') + ); + + if ($dueDateEnabled === 'YES') { + $dueDateDays = CompanySetting::getSetting( + 'invoice_due_date_days', + $request->header('company') + ); + $due_date = Carbon::now()->addDays($dueDateDays)->format('Y-m-d'); + } + + $exchange_rate = $invoice->exchange_rate; + + $newInvoice = Invoice::create([ + 'invoice_date' => $date->format('Y-m-d'), + 'due_date' => $due_date, + 'invoice_number' => $serial->getNextNumber(), + 'sequence_number' => $serial->nextSequenceNumber, + 'customer_sequence_number' => $serial->nextCustomerSequenceNumber, + 'reference_number' => $invoice->reference_number, + 'customer_id' => $invoice->customer_id, + 'company_id' => $request->header('company'), + 'template_name' => $invoice->template_name, + 'status' => Invoice::STATUS_DRAFT, + 'paid_status' => Invoice::STATUS_UNPAID, + 'sub_total' => $invoice->sub_total, + 'discount' => $invoice->discount, + 'discount_type' => $invoice->discount_type, + 'discount_val' => $invoice->discount_val, + 'total' => $invoice->total, + 'due_amount' => $invoice->total, + 'tax_per_item' => $invoice->tax_per_item, + 'discount_per_item' => $invoice->discount_per_item, + 'tax' => $invoice->tax, + 'notes' => $invoice->notes, + 'exchange_rate' => $exchange_rate, + 'base_total' => $invoice->total * $exchange_rate, + 'base_discount_val' => $invoice->discount_val * $exchange_rate, + 'base_sub_total' => $invoice->sub_total * $exchange_rate, + 'base_tax' => $invoice->tax * $exchange_rate, + 'base_due_amount' => $invoice->total * $exchange_rate, + 'currency_id' => $invoice->currency_id, + ]); + + $newInvoice->unique_hash = Hashids::connection(Invoice::class)->encode($newInvoice->id); + $newInvoice->save(); + $invoice->load('items.taxes'); + + $invoiceItems = $invoice->items->toArray(); + + foreach ($invoiceItems as $invoiceItem) { + $invoiceItem['company_id'] = $request->header('company'); + $invoiceItem['name'] = $invoiceItem['name']; + $invoiceItem['exchange_rate'] = $exchange_rate; + $invoiceItem['base_price'] = $invoiceItem['price'] * $exchange_rate; + $invoiceItem['base_discount_val'] = $invoiceItem['discount_val'] * $exchange_rate; + $invoiceItem['base_tax'] = $invoiceItem['tax'] * $exchange_rate; + $invoiceItem['base_total'] = $invoiceItem['total'] * $exchange_rate; + + $item = $newInvoice->items()->create($invoiceItem); + + if (array_key_exists('taxes', $invoiceItem) && $invoiceItem['taxes']) { + foreach ($invoiceItem['taxes'] as $tax) { + $tax['company_id'] = $request->header('company'); + + if ($tax['amount']) { + $item->taxes()->create($tax); + } + } + } + } + + if ($invoice->taxes) { + foreach ($invoice->taxes->toArray() as $tax) { + $tax['company_id'] = $request->header('company'); + $newInvoice->taxes()->create($tax); + } + } + + if ($invoice->fields()->exists()) { + $customFields = []; + + foreach ($invoice->fields as $data) { + $customFields[] = [ + 'id' => $data->custom_field_id, + 'value' => $data->defaultAnswer + ]; + } + + $newInvoice->addCustomFields($customFields); + } + + return new InvoiceResource($newInvoice); + } +} diff --git a/app/Http/Controllers/V1/Admin/Invoice/InvoiceTemplatesController.php b/app/Http/Controllers/V1/Admin/Invoice/InvoiceTemplatesController.php new file mode 100644 index 000000000..a9e0b9771 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Invoice/InvoiceTemplatesController.php @@ -0,0 +1,27 @@ +authorize('viewAny', Invoice::class); + + $invoiceTemplates = Invoice::invoiceTemplates(); + + return response()->json([ + 'invoiceTemplates' => $invoiceTemplates, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Invoice/InvoicesController.php b/app/Http/Controllers/V1/Admin/Invoice/InvoicesController.php new file mode 100644 index 000000000..f1c7fd21a --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Invoice/InvoicesController.php @@ -0,0 +1,111 @@ +authorize('viewAny', Invoice::class); + + $limit = $request->has('limit') ? $request->limit : 10; + + $invoices = Invoice::whereCompany() + ->join('customers', 'customers.id', '=', 'invoices.customer_id') + ->applyFilters($request->all()) + ->select('invoices.*', 'customers.name') + ->latest() + ->paginateData($limit); + + return (InvoiceResource::collection($invoices)) + ->additional(['meta' => [ + 'invoice_total_count' => Invoice::whereCompany()->count(), + ]]); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function store(Requests\InvoicesRequest $request) + { + $this->authorize('create', Invoice::class); + + $invoice = Invoice::createInvoice($request); + + if ($request->has('invoiceSend')) { + $invoice->send($request->subject, $request->body); + } + + GenerateInvoicePdfJob::dispatch($invoice); + + return new InvoiceResource($invoice); + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\Invoice $invoice + * @return \Illuminate\Http\JsonResponse + */ + public function show(Request $request, Invoice $invoice) + { + $this->authorize('view', $invoice); + + return new InvoiceResource($invoice); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param Invoice $invoice + * @return \Illuminate\Http\JsonResponse + */ + public function update(Requests\InvoicesRequest $request, Invoice $invoice) + { + $this->authorize('update', $invoice); + + $invoice = $invoice->updateInvoice($request); + + if (is_string($invoice)) { + return respondJson($invoice, $invoice); + } + + GenerateInvoicePdfJob::dispatch($invoice, true); + + return new InvoiceResource($invoice); + } + + /** + * delete the specified resources in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function delete(DeleteInvoiceRequest $request) + { + $this->authorize('delete multiple invoices'); + + Invoice::destroy($request->ids); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Invoice/SendInvoiceController.php b/app/Http/Controllers/V1/Admin/Invoice/SendInvoiceController.php similarity index 84% rename from app/Http/Controllers/V1/Invoice/SendInvoiceController.php rename to app/Http/Controllers/V1/Admin/Invoice/SendInvoiceController.php index c18930b65..1ebcc4b25 100644 --- a/app/Http/Controllers/V1/Invoice/SendInvoiceController.php +++ b/app/Http/Controllers/V1/Admin/Invoice/SendInvoiceController.php @@ -1,6 +1,6 @@ authorize('send invoice', $invoice); + $invoice->send($request->all()); return response()->json([ diff --git a/app/Http/Controllers/V1/Admin/Invoice/SendInvoicePreviewController.php b/app/Http/Controllers/V1/Admin/Invoice/SendInvoicePreviewController.php new file mode 100644 index 000000000..8fab525cb --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Invoice/SendInvoicePreviewController.php @@ -0,0 +1,26 @@ +authorize('send invoice', $invoice); + + $markdown = new Markdown(view(), config('mail.markdown')); + + return $markdown->render('emails.send.invoice', ['data' => $invoice->sendInvoiceData($request->all())]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Item/ItemsController.php b/app/Http/Controllers/V1/Admin/Item/ItemsController.php new file mode 100644 index 000000000..8e74c696b --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Item/ItemsController.php @@ -0,0 +1,101 @@ +authorize('viewAny', Item::class); + + $limit = $request->has('limit') ? $request->limit : 10; + + $items = Item::whereCompany() + ->leftJoin('units', 'units.id', '=', 'items.unit_id') + ->applyFilters($request->all()) + ->select('items.*', 'units.name as unit_name') + ->latest() + ->paginateData($limit); + + return (ItemResource::collection($items)) + ->additional(['meta' => [ + 'tax_types' => TaxType::whereCompany()->latest()->get(), + 'item_total_count' => Item::whereCompany()->count(), + ]]); + } + + /** + * Create Item. + * + * @param Crater\Http\Requests\ItemsRequest $request + * @return \Illuminate\Http\JsonResponse + */ + public function store(Requests\ItemsRequest $request) + { + $this->authorize('create', Item::class); + + $item = Item::createItem($request); + + return new ItemResource($item); + } + + /** + * get an existing Item. + * + * @param Item $item + * @return \Illuminate\Http\JsonResponse + */ + public function show(Item $item) + { + $this->authorize('view', $item); + + return new ItemResource($item); + } + + /** + * Update an existing Item. + * + * @param Crater\Http\Requests\ItemsRequest $request + * @param \Crater\Models\Item $item + * @return \Illuminate\Http\JsonResponse + */ + public function update(Requests\ItemsRequest $request, Item $item) + { + $this->authorize('update', $item); + + $item = $item->updateItem($request); + + return new ItemResource($item); + } + + /** + * Delete a list of existing Items. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function delete(DeleteItemsRequest $request) + { + $this->authorize('delete multiple items'); + + Item::destroy($request->ids); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Item/UnitsController.php b/app/Http/Controllers/V1/Admin/Item/UnitsController.php new file mode 100644 index 000000000..70a78ea32 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Item/UnitsController.php @@ -0,0 +1,96 @@ +authorize('viewAny', Unit::class); + + $limit = $request->has('limit') ? $request->limit : 5; + + $units = Unit::applyFilters($request->all()) + ->whereCompany() + ->latest() + ->paginateData($limit); + + return UnitResource::collection($units); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(UnitRequest $request) + { + $this->authorize('create', Unit::class); + + $unit = Unit::create($request->getUnitPayload()); + + return new UnitResource($unit); + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\Unit $unit + * @return \Illuminate\Http\Response + */ + public function show(Unit $unit) + { + $this->authorize('view', $unit); + + return new UnitResource($unit); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Crater\Models\Unit $unit + * @return \Illuminate\Http\Response + */ + public function update(UnitRequest $request, Unit $unit) + { + $this->authorize('update', $unit); + + $unit->update($request->getUnitPayload()); + + return new UnitResource($unit); + } + + /** + * Remove the specified resource from storage. + * + * @param \Crater\Models\Unit $unit + * @return \Illuminate\Http\Response + */ + public function destroy(Unit $unit) + { + $this->authorize('delete', $unit); + + if ($unit->items()->exists()) { + return respondJson('items_attached', 'Items Attached'); + } + + $unit->delete(); + + return response()->json([ + 'success' => 'Unit deleted successfully', + ]); + } +} diff --git a/app/Http/Controllers/V1/Mobile/AuthController.php b/app/Http/Controllers/V1/Admin/Mobile/AuthController.php similarity index 79% rename from app/Http/Controllers/V1/Mobile/AuthController.php rename to app/Http/Controllers/V1/Admin/Mobile/AuthController.php index f4b1b5ec9..e7603e5db 100644 --- a/app/Http/Controllers/V1/Mobile/AuthController.php +++ b/app/Http/Controllers/V1/Admin/Mobile/AuthController.php @@ -1,8 +1,9 @@ validate([ - 'username' => 'required|email', - 'password' => 'required', - 'device_name' => 'required', - ]); - $user = User::where('email', $request->username)->first(); if (! $user || ! Hash::check($request->password, $user->password)) { diff --git a/app/Http/Controllers/V1/Admin/Payment/PaymentMethodsController.php b/app/Http/Controllers/V1/Admin/Payment/PaymentMethodsController.php new file mode 100644 index 000000000..0d12db8b4 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Payment/PaymentMethodsController.php @@ -0,0 +1,98 @@ +authorize('viewAny', PaymentMethod::class); + + $limit = $request->has('limit') ? $request->limit : 5; + + $paymentMethods = PaymentMethod::applyFilters($request->all()) + ->whereCompany() + ->latest() + ->paginateData($limit); + + return PaymentMethodResource::collection($paymentMethods); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(PaymentMethodRequest $request) + { + $this->authorize('create', PaymentMethod::class); + + $paymentMethod = PaymentMethod::createPaymentMethod($request); + + return new PaymentMethodResource($paymentMethod); + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\PaymentMethod $paymentMethod + * @return \Illuminate\Http\Response + */ + public function show(PaymentMethod $paymentMethod) + { + $this->authorize('view', $paymentMethod); + + return new PaymentMethodResource($paymentMethod); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Crater\Models\PaymentMethod $paymentMethod + * @return \Illuminate\Http\Response + */ + public function update(PaymentMethodRequest $request, PaymentMethod $paymentMethod) + { + $this->authorize('update', $paymentMethod); + + $paymentMethod->update($request->validated()); + + return new PaymentMethodResource($paymentMethod); + } + + /** + * Remove the specified resource from storage. + * + * @param \Crater\Models\PaymentMethod $paymentMethod + * @return \Illuminate\Http\Response + */ + public function destroy(PaymentMethod $paymentMethod) + { + $this->authorize('delete', $paymentMethod); + + $payments = $paymentMethod->payments; + + if ($payments->count() > 0) { + return respondJson('payments_attached', 'Payments Attached.'); + } + + $paymentMethod->delete(); + + return response()->json([ + 'success' => 'Payment method deleted successfully', + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Payment/PaymentsController.php b/app/Http/Controllers/V1/Admin/Payment/PaymentsController.php new file mode 100644 index 000000000..85119f76c --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Payment/PaymentsController.php @@ -0,0 +1,81 @@ +authorize('viewAny', Payment::class); + + $limit = $request->has('limit') ? $request->limit : 10; + + $payments = Payment::whereCompany() + ->join('customers', 'customers.id', '=', 'payments.customer_id') + ->leftJoin('invoices', 'invoices.id', '=', 'payments.invoice_id') + ->leftJoin('payment_methods', 'payment_methods.id', '=', 'payments.payment_method_id') + ->applyFilters($request->all()) + ->select('payments.*', 'customers.name', 'invoices.invoice_number', 'payment_methods.name as payment_mode') + ->latest() + ->paginateData($limit); + + return (PaymentResource::collection($payments)) + ->additional(['meta' => [ + 'payment_total_count' => Payment::whereCompany()->count(), + ]]); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(PaymentRequest $request) + { + $this->authorize('create', Payment::class); + + $payment = Payment::createPayment($request); + + return new PaymentResource($payment); + } + + public function show(Request $request, Payment $payment) + { + $this->authorize('view', $payment); + + return new PaymentResource($payment); + } + + public function update(PaymentRequest $request, Payment $payment) + { + $this->authorize('update', $payment); + + $payment = $payment->updatePayment($request); + + return new PaymentResource($payment); + } + + public function delete(DeletePaymentsRequest $request) + { + $this->authorize('delete multiple payments'); + + Payment::deletePayments($request->ids); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Payment/SendPaymentController.php b/app/Http/Controllers/V1/Admin/Payment/SendPaymentController.php similarity index 82% rename from app/Http/Controllers/V1/Payment/SendPaymentController.php rename to app/Http/Controllers/V1/Admin/Payment/SendPaymentController.php index 4a95c8218..2bafed347 100644 --- a/app/Http/Controllers/V1/Payment/SendPaymentController.php +++ b/app/Http/Controllers/V1/Admin/Payment/SendPaymentController.php @@ -1,6 +1,6 @@ authorize('send payment', $payment); + $response = $payment->send($request->all()); return response()->json($response); diff --git a/app/Http/Controllers/V1/Admin/Payment/SendPaymentPreviewController.php b/app/Http/Controllers/V1/Admin/Payment/SendPaymentPreviewController.php new file mode 100644 index 000000000..5c1bc6296 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Payment/SendPaymentPreviewController.php @@ -0,0 +1,26 @@ +authorize('send payment', $payment); + + $markdown = new Markdown(view(), config('mail.markdown')); + + return $markdown->render('emails.send.payment', ['data' => $payment->sendPaymentData($request->all())]); + } +} diff --git a/app/Http/Controllers/V1/Admin/RecurringInvoice/RecurringInvoiceController.php b/app/Http/Controllers/V1/Admin/RecurringInvoice/RecurringInvoiceController.php new file mode 100644 index 000000000..10fc56c45 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/RecurringInvoice/RecurringInvoiceController.php @@ -0,0 +1,94 @@ +authorize('viewAny', RecurringInvoice::class); + + $limit = $request->has('limit') ? $request->limit : 10; + + $recurringInvoices = RecurringInvoice::whereCompany() + ->applyFilters($request->all()) + ->paginateData($limit); + + return (RecurringInvoiceResource::collection($recurringInvoices)) + ->additional(['meta' => [ + 'recurring_invoice_total_count' => RecurringInvoice::whereCompany()->count(), + ]]); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(RecurringInvoiceRequest $request) + { + $this->authorize('create', RecurringInvoice::class); + + $recurringInvoice = RecurringInvoice::createFromRequest($request); + + return new RecurringInvoiceResource($recurringInvoice); + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\RecurringInvoice $recurringInvoice + * @return \Illuminate\Http\Response + */ + public function show(RecurringInvoice $recurringInvoice) + { + $this->authorize('view', $recurringInvoice); + + return new RecurringInvoiceResource($recurringInvoice); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Crater\Models\RecurringInvoice $recurringInvoice + * @return \Illuminate\Http\Response + */ + public function update(RecurringInvoiceRequest $request, RecurringInvoice $recurringInvoice) + { + $this->authorize('update', $recurringInvoice); + + $recurringInvoice->updateFromRequest($request); + + return new RecurringInvoiceResource($recurringInvoice); + } + + /** + * Remove the specified resource from storage. + * + * @param \Crater\Models\RecurringInvoice $recurringInvoice + * @return \Illuminate\Http\Response + */ + public function delete(Request $request) + { + $this->authorize('delete multiple recurring invoices'); + + RecurringInvoice::deleteRecurringInvoice($request->ids); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/RecurringInvoice/RecurringInvoiceFrequencyController.php b/app/Http/Controllers/V1/Admin/RecurringInvoice/RecurringInvoiceFrequencyController.php new file mode 100644 index 000000000..77cce3f3f --- /dev/null +++ b/app/Http/Controllers/V1/Admin/RecurringInvoice/RecurringInvoiceFrequencyController.php @@ -0,0 +1,20 @@ +frequency, $request->starts_at); + + return response()->json([ + 'success' => true, + 'next_invoice_at' => $nextInvoiceAt, + ]); + } +} diff --git a/app/Http/Controllers/V1/Report/CustomerSalesReportController.php b/app/Http/Controllers/V1/Admin/Report/CustomerSalesReportController.php similarity index 87% rename from app/Http/Controllers/V1/Report/CustomerSalesReportController.php rename to app/Http/Controllers/V1/Admin/Report/CustomerSalesReportController.php index 7df1c048e..736a6576d 100644 --- a/app/Http/Controllers/V1/Report/CustomerSalesReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/CustomerSalesReportController.php @@ -1,12 +1,12 @@ first(); + $this->authorize('view report', $company); + $locale = CompanySetting::getSetting('language', $company->id); App::setLocale($locale); @@ -31,14 +33,13 @@ public function __invoke(Request $request, $hash) $start = Carbon::createFromFormat('Y-m-d', $request->from_date); $end = Carbon::createFromFormat('Y-m-d', $request->to_date); - $customers = User::with(['invoices' => function ($query) use ($start, $end) { + $customers = Customer::with(['invoices' => function ($query) use ($start, $end) { $query->whereBetween( 'invoice_date', [$start->format('Y-m-d'), $end->format('Y-m-d')] ); }]) - ->customer() - ->whereCompany($company->id) + ->where('company_id', $company->id) ->applyInvoiceFilters($request->only(['from_date', 'to_date'])) ->get(); @@ -83,6 +84,10 @@ public function __invoke(Request $request, $hash) $pdf = PDF::loadView('app.pdf.reports.sales-customers'); + if ($request->has('preview')) { + return view('app.pdf.reports.sales-customers'); + } + if ($request->has('download')) { return $pdf->download(); } diff --git a/app/Http/Controllers/V1/Report/ExpensesReportController.php b/app/Http/Controllers/V1/Admin/Report/ExpensesReportController.php similarity index 89% rename from app/Http/Controllers/V1/Report/ExpensesReportController.php rename to app/Http/Controllers/V1/Admin/Report/ExpensesReportController.php index 7e44b470d..f48518957 100644 --- a/app/Http/Controllers/V1/Report/ExpensesReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/ExpensesReportController.php @@ -1,6 +1,6 @@ first(); + $this->authorize('view report', $company); + $locale = CompanySetting::getSetting('language', $company->id); App::setLocale($locale); $expenseCategories = Expense::with('category') - ->whereCompany($company->id) + ->whereCompanyId($company->id) ->applyFilters($request->only(['from_date', 'to_date'])) ->expensesAttributes() ->get(); - $totalAmount = 0; foreach ($expenseCategories as $category) { $totalAmount += $category->total_amount; @@ -68,6 +69,10 @@ public function __invoke(Request $request, $hash) ]); $pdf = PDF::loadView('app.pdf.reports.expenses'); + if ($request->has('preview')) { + return view('app.pdf.reports.expenses'); + } + if ($request->has('download')) { return $pdf->download(); } diff --git a/app/Http/Controllers/V1/Report/ItemSalesReportController.php b/app/Http/Controllers/V1/Admin/Report/ItemSalesReportController.php similarity index 91% rename from app/Http/Controllers/V1/Report/ItemSalesReportController.php rename to app/Http/Controllers/V1/Admin/Report/ItemSalesReportController.php index 2d7a99672..c68ea2fba 100644 --- a/app/Http/Controllers/V1/Report/ItemSalesReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/ItemSalesReportController.php @@ -1,6 +1,6 @@ first(); + $this->authorize('view report', $company); + $locale = CompanySetting::getSetting('language', $company->id); App::setLocale($locale); @@ -67,6 +69,10 @@ public function __invoke(Request $request, $hash) ]); $pdf = PDF::loadView('app.pdf.reports.sales-items'); + if ($request->has('preview')) { + return view('app.pdf.reports.sales-items'); + } + if ($request->has('download')) { return $pdf->download(); } diff --git a/app/Http/Controllers/V1/Report/ProfitLossReportController.php b/app/Http/Controllers/V1/Admin/Report/ProfitLossReportController.php similarity index 88% rename from app/Http/Controllers/V1/Report/ProfitLossReportController.php rename to app/Http/Controllers/V1/Admin/Report/ProfitLossReportController.php index 56b916b3d..b16272c32 100644 --- a/app/Http/Controllers/V1/Report/ProfitLossReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/ProfitLossReportController.php @@ -1,6 +1,6 @@ first(); + $this->authorize('view report', $company); + $locale = CompanySetting::getSetting('language', $company->id); App::setLocale($locale); - $invoicesAmount = Invoice::whereCompany($company->id) + $invoicesAmount = Invoice::whereCompanyId($company->id) ->applyFilters($request->only(['from_date', 'to_date'])) ->wherePaidStatus(Invoice::STATUS_PAID) ->sum('total'); $expenseCategories = Expense::with('category') - ->whereCompany($company->id) + ->whereCompanyId($company->id) ->applyFilters($request->only(['from_date', 'to_date'])) ->expensesAttributes() ->get(); @@ -76,6 +78,10 @@ public function __invoke(Request $request, $hash) ]); $pdf = PDF::loadView('app.pdf.reports.profit-loss'); + if ($request->has('preview')) { + return view('app.pdf.reports.profit-loss'); + } + if ($request->has('download')) { return $pdf->download(); } diff --git a/app/Http/Controllers/V1/Report/TaxSummaryReportController.php b/app/Http/Controllers/V1/Admin/Report/TaxSummaryReportController.php similarity index 89% rename from app/Http/Controllers/V1/Report/TaxSummaryReportController.php rename to app/Http/Controllers/V1/Admin/Report/TaxSummaryReportController.php index b54675560..48c690e47 100644 --- a/app/Http/Controllers/V1/Report/TaxSummaryReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/TaxSummaryReportController.php @@ -1,6 +1,6 @@ first(); + $this->authorize('view report', $company); + $locale = CompanySetting::getSetting('language', $company->id); App::setLocale($locale); $taxTypes = Tax::with('taxType', 'invoice', 'invoiceItem') - ->whereCompany($company->id) + ->whereCompany($company->id) ->whereInvoicesFilters($request->only(['from_date', 'to_date'])) ->taxAttributes() ->get(); @@ -70,6 +72,10 @@ public function __invoke(Request $request, $hash) $pdf = PDF::loadView('app.pdf.reports.tax-summary'); + if ($request->has('preview')) { + return view('app.pdf.reports.tax-summary'); + } + if ($request->has('download')) { return $pdf->download(); } diff --git a/app/Http/Controllers/V1/Admin/Role/AbilitiesController.php b/app/Http/Controllers/V1/Admin/Role/AbilitiesController.php new file mode 100644 index 000000000..5223db745 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Role/AbilitiesController.php @@ -0,0 +1,20 @@ +json(['abilities' => config('abilities.abilities')]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Role/RolesController.php b/app/Http/Controllers/V1/Admin/Role/RolesController.php new file mode 100644 index 000000000..e64abe049 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Role/RolesController.php @@ -0,0 +1,119 @@ +authorize('viewAny', Role::class); + + $roles = Role::when($request->has('orderByField'), function ($query) use ($request) { + return $query->orderBy($request['orderByField'], $request['orderBy']); + }) + ->when($request->company_id, function ($query) use ($request) { + return $query->where('scope', $request->company_id); + }) + ->get(); + + return RoleResource::collection($roles); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(RoleRequest $request) + { + $this->authorize('create', Role::class); + + $role = Role::create($request->getRolePayload()); + + $this->syncAbilities($request, $role); + + return new RoleResource($role); + } + + /** + * Display the specified resource. + * + * @param \Spatie\Permission\Models\Role $role + * @return \Illuminate\Http\Response + */ + public function show(Role $role) + { + $this->authorize('view', $role); + + return new RoleResource($role); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Spatie\Permission\Models\Role $role + * @return \Illuminate\Http\Response + */ + public function update(RoleRequest $request, Role $role) + { + $this->authorize('update', $role); + + $role->update($request->getRolePayload()); + + $this->syncAbilities($request, $role); + + return new RoleResource($role); + } + + /** + * Remove the specified resource from storage. + * + * @param \Spatie\Permission\Models\Role $role + * @return \Illuminate\Http\Response + */ + public function destroy(Role $role) + { + $this->authorize('delete', $role); + + $users = User::whereIs($role->name)->get()->toArray(); + + if (! empty($users)) { + return respondJson('role_attached_to_users', 'Roles Attached to user'); + } + + $role->delete(); + + return response()->json([ + 'success' => true + ]); + } + + private function syncAbilities(RoleRequest $request, $role) + { + foreach (config('abilities.abilities') as $ability) { + $check = array_search($ability['ability'], array_column($request->abilities, 'ability')); + if ($check !== false) { + BouncerFacade::allow($role)->to($ability['ability'], $ability['model']); + } else { + BouncerFacade::disallow($role)->to($ability['ability'], $ability['model']); + } + } + + return true; + } +} diff --git a/app/Http/Controllers/V1/Admin/Settings/CompanyController.php b/app/Http/Controllers/V1/Admin/Settings/CompanyController.php new file mode 100644 index 000000000..f594e13bf --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Settings/CompanyController.php @@ -0,0 +1,117 @@ +user()); + } + + /** + * Update the Admin profile. + * Includes name, email and (or) password + * + * @param \Crater\Http\Requests\ProfileRequest $request + * @return \Illuminate\Http\JsonResponse + */ + public function updateProfile(ProfileRequest $request) + { + $user = $request->user(); + + $user->update($request->validated()); + + return new UserResource($user); + } + + /** + * Update Admin Company Details + * @param \Crater\Http\Requests\CompanyRequest $request + * @return \Illuminate\Http\JsonResponse + */ + public function updateCompany(CompanyRequest $request) + { + $company = Company::find($request->header('company')); + + $this->authorize('manage company', $company); + + $company->update($request->only('name')); + + $company->address()->updateOrCreate(['company_id' => $company->id], $request->address); + + return new CompanyResource($company); + } + + /** + * Upload the company logo to storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function uploadCompanyLogo(Request $request) + { + $company = Company::find($request->header('company')); + + $this->authorize('manage company', $company); + + $data = json_decode($request->company_logo); + + if ($data) { + $company = Company::find($request->header('company')); + + if ($company) { + $company->clearMediaCollection('logo'); + + $company->addMediaFromBase64($data->data) + ->usingFileName($data->name) + ->toMediaCollection('logo'); + } + } + + return response()->json([ + 'success' => true, + ]); + } + + /** + * Upload the Admin Avatar to public storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function uploadAvatar(Request $request) + { + $user = auth()->user(); + + if ($user && $request->hasFile('admin_avatar')) { + $user->clearMediaCollection('admin_avatar'); + + $user->addMediaFromRequest('admin_avatar') + ->toMediaCollection('admin_avatar'); + } + + if ($user && $request->has('avatar')) { + $data = json_decode($request->avatar); + $user->clearMediaCollection('admin_avatar'); + + $user->addMediaFromBase64($data->data) + ->usingFileName($data->name) + ->toMediaCollection('admin_avatar'); + } + + return new UserResource($user); + } +} diff --git a/app/Http/Controllers/V1/Settings/DiskController.php b/app/Http/Controllers/V1/Admin/Settings/DiskController.php similarity index 83% rename from app/Http/Controllers/V1/Settings/DiskController.php rename to app/Http/Controllers/V1/Admin/Settings/DiskController.php index 9f00901f3..54da86809 100644 --- a/app/Http/Controllers/V1/Settings/DiskController.php +++ b/app/Http/Controllers/V1/Admin/Settings/DiskController.php @@ -1,9 +1,10 @@ authorize('manage file disk'); + $limit = $request->has('limit') ? $request->limit : 5; $disks = FileDisk::applyFilters($request->all()) ->latest() ->paginateData($limit); - return response()->json([ - 'disks' => $disks, - ]); + return FileDiskResource::collection($disks); } /** @@ -33,19 +34,15 @@ public function index(Request $request) */ public function store(DiskEnvironmentRequest $request) { + $this->authorize('manage file disk'); + if (! FileDisk::validateCredentials($request->credentials, $request->driver)) { - return response()->json([ - 'success' => false, - 'error' => 'invalid_credentials', - ]); + return respondJson('invalid_credentials', 'Invalid Credentials.'); } $disk = FileDisk::createDisk($request); - return response()->json([ - 'success' => true, - 'disk' => $disk, - ]); + return new FileDiskResource($disk); } /** @@ -56,15 +53,14 @@ public function store(DiskEnvironmentRequest $request) */ public function update(FileDisk $disk, Request $request) { + $this->authorize('manage file disk'); + $credentials = $request->credentials; $driver = $request->driver; if ($credentials && $driver && $disk->type !== 'SYSTEM') { if (! FileDisk::validateCredentials($credentials, $driver)) { - return response()->json([ - 'success' => false, - 'error' => 'invalid_credentials', - ]); + return respondJson('invalid_credentials', 'Invalid Credentials.'); } $disk->updateDisk($request); @@ -72,10 +68,7 @@ public function update(FileDisk $disk, Request $request) $disk->setAsDefaultDisk(); } - return response()->json([ - 'success' => true, - 'disk' => $disk, - ]); + return new FileDiskResource($disk); } /** @@ -84,6 +77,8 @@ public function update(FileDisk $disk, Request $request) */ public function show($disk) { + $this->authorize('manage file disk'); + $diskData = []; switch ($disk) { case 'local': @@ -142,10 +137,10 @@ public function show($disk) */ public function destroy(FileDisk $disk) { + $this->authorize('manage file disk'); + if ($disk->setAsDefault() && $disk->type === 'SYSTEM') { - return response()->json([ - 'success' => false, - ]); + return respondJson('not_allowed', 'Not Allowed'); } $disk->delete(); @@ -161,6 +156,8 @@ public function destroy(FileDisk $disk) */ public function getDiskDrivers() { + $this->authorize('manage file disk'); + $drivers = [ [ 'name' => 'Local', diff --git a/app/Http/Controllers/V1/Admin/Settings/GetCompanyMailConfigurationController.php b/app/Http/Controllers/V1/Admin/Settings/GetCompanyMailConfigurationController.php new file mode 100644 index 000000000..6e8b6b769 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Settings/GetCompanyMailConfigurationController.php @@ -0,0 +1,25 @@ + config('mail.from.name'), + 'from_mail' => config('mail.from.address'), + ]; + + return response()->json($mailConfig); + } +} diff --git a/app/Http/Controllers/V1/Settings/GetCompanySettingsController.php b/app/Http/Controllers/V1/Admin/Settings/GetCompanySettingsController.php similarity index 91% rename from app/Http/Controllers/V1/Settings/GetCompanySettingsController.php rename to app/Http/Controllers/V1/Admin/Settings/GetCompanySettingsController.php index 115ec4b57..f01c42f81 100644 --- a/app/Http/Controllers/V1/Settings/GetCompanySettingsController.php +++ b/app/Http/Controllers/V1/Admin/Settings/GetCompanySettingsController.php @@ -1,6 +1,6 @@ user(); return response()->json($user->getSettings($request->settings)); } diff --git a/app/Http/Controllers/V1/Settings/MailConfigurationController.php b/app/Http/Controllers/V1/Admin/Settings/MailConfigurationController.php similarity index 92% rename from app/Http/Controllers/V1/Settings/MailConfigurationController.php rename to app/Http/Controllers/V1/Admin/Settings/MailConfigurationController.php index d17623517..29794d5c9 100755 --- a/app/Http/Controllers/V1/Settings/MailConfigurationController.php +++ b/app/Http/Controllers/V1/Admin/Settings/MailConfigurationController.php @@ -1,6 +1,6 @@ authorize('manage email config'); + $setting = Setting::getSetting('profile_complete'); $results = $this->environmentManager->saveMailVariables($request); @@ -45,6 +47,8 @@ public function saveMailEnvironment(MailEnvironmentRequest $request) public function getMailEnvironment() { + $this->authorize('manage email config'); + $MailData = [ 'mail_driver' => config('mail.driver'), 'mail_host' => config('mail.host'), @@ -71,6 +75,8 @@ public function getMailEnvironment() */ public function getMailDrivers() { + $this->authorize('manage email config'); + $drivers = [ 'smtp', 'mail', @@ -84,6 +90,8 @@ public function getMailDrivers() public function testEmailConfig(Request $request) { + $this->authorize('manage email config'); + $this->validate($request, [ 'to' => 'required|email', 'subject' => 'required', diff --git a/app/Http/Controllers/V1/Admin/Settings/TaxTypesController.php b/app/Http/Controllers/V1/Admin/Settings/TaxTypesController.php new file mode 100644 index 000000000..419b2b630 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Settings/TaxTypesController.php @@ -0,0 +1,96 @@ +authorize('viewAny', TaxType::class); + + $limit = $request->has('limit') ? $request->limit : 5; + + $taxTypes = TaxType::applyFilters($request->all()) + ->whereCompany() + ->latest() + ->paginateData($limit); + + return TaxTypeResource::collection($taxTypes); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(TaxTypeRequest $request) + { + $this->authorize('create', TaxType::class); + + $taxType = TaxType::create($request->getTaxTypePayload()); + + return new TaxTypeResource($taxType); + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\TaxType $taxType + * @return \Illuminate\Http\Response + */ + public function show(TaxType $taxType) + { + $this->authorize('view', $taxType); + + return new TaxTypeResource($taxType); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \Crater\Models\TaxType $taxType + * @return \Illuminate\Http\Response + */ + public function update(TaxTypeRequest $request, TaxType $taxType) + { + $this->authorize('update', $taxType); + + $taxType->update($request->getTaxTypePayload()); + + return new TaxTypeResource($taxType); + } + + /** + * Remove the specified resource from storage. + * + * @param \Crater\Models\TaxType $taxType + * @return \Illuminate\Http\Response + */ + public function destroy(TaxType $taxType) + { + $this->authorize('delete', $taxType); + + if ($taxType->taxes() && $taxType->taxes()->count() > 0) { + return respondJson('taxes_attached', 'Taxes Attached.'); + } + + $taxType->delete(); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Settings/UpdateCompanySettingsController.php b/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php similarity index 77% rename from app/Http/Controllers/V1/Settings/UpdateCompanySettingsController.php rename to app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php index a434727c9..264b0af70 100644 --- a/app/Http/Controllers/V1/Settings/UpdateCompanySettingsController.php +++ b/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php @@ -1,9 +1,10 @@ authorize('manage company', Company::find($request->header('company'))); + CompanySetting::setSettings($request->settings, $request->header('company')); return response()->json([ diff --git a/app/Http/Controllers/V1/Settings/UpdateUserSettingsController.php b/app/Http/Controllers/V1/Admin/Settings/UpdateUserSettingsController.php similarity index 85% rename from app/Http/Controllers/V1/Settings/UpdateUserSettingsController.php rename to app/Http/Controllers/V1/Admin/Settings/UpdateUserSettingsController.php index 2b3367ae2..9bf317b78 100644 --- a/app/Http/Controllers/V1/Settings/UpdateUserSettingsController.php +++ b/app/Http/Controllers/V1/Admin/Settings/UpdateUserSettingsController.php @@ -1,8 +1,7 @@ user(); $user->setSettings($request->settings); diff --git a/app/Http/Controllers/V1/Admin/Update/CheckVersionController.php b/app/Http/Controllers/V1/Admin/Update/CheckVersionController.php new file mode 100644 index 000000000..5ae96227b --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Update/CheckVersionController.php @@ -0,0 +1,33 @@ +user()) || (! $request->user()->isOwner())) { + return response()->json([ + 'success' => false, + 'message' => 'You are not allowed to update this app.' + ], 401); + } + + set_time_limit(600); // 10 minutes + + $json = Updater::checkForUpdate(Setting::getSetting('version')); + + return response()->json($json); + } +} diff --git a/app/Http/Controllers/V1/Admin/Update/CopyFilesController.php b/app/Http/Controllers/V1/Admin/Update/CopyFilesController.php new file mode 100644 index 000000000..81c211614 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Update/CopyFilesController.php @@ -0,0 +1,37 @@ +user()) || (! $request->user()->isOwner())) { + return response()->json([ + 'success' => false, + 'message' => 'You are not allowed to update this app.' + ], 401); + } + + $request->validate([ + 'path' => 'required', + ]); + + $path = Updater::copyFiles($request->path); + + return response()->json([ + 'success' => true, + 'path' => $path, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Update/DeleteFilesController.php b/app/Http/Controllers/V1/Admin/Update/DeleteFilesController.php new file mode 100644 index 000000000..750700ce3 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Update/DeleteFilesController.php @@ -0,0 +1,34 @@ +user()) || (! $request->user()->isOwner())) { + return response()->json([ + 'success' => false, + 'message' => 'You are not allowed to update this app.' + ], 401); + } + + if (isset($request->deleted_files) && ! empty($request->deleted_files)) { + Updater::deleteFiles($request->deleted_files); + } + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Update/DownloadUpdateController.php b/app/Http/Controllers/V1/Admin/Update/DownloadUpdateController.php new file mode 100644 index 000000000..7005fafba --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Update/DownloadUpdateController.php @@ -0,0 +1,37 @@ +user()) || (! $request->user()->isOwner())) { + return response()->json([ + 'success' => false, + 'message' => 'You are not allowed to update this app.' + ], 401); + } + + $request->validate([ + 'version' => 'required', + ]); + + $path = Updater::download($request->version); + + return response()->json([ + 'success' => true, + 'path' => $path, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Update/FinishUpdateController.php b/app/Http/Controllers/V1/Admin/Update/FinishUpdateController.php new file mode 100644 index 000000000..cb5de4282 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Update/FinishUpdateController.php @@ -0,0 +1,35 @@ +user()) || (! $request->user()->isOwner())) { + return response()->json([ + 'success' => false, + 'message' => 'You are not allowed to update this app.' + ], 401); + } + + $request->validate([ + 'installed' => 'required', + 'version' => 'required', + ]); + + $json = Updater::finishUpdate($request->installed, $request->version); + + return response()->json($json); + } +} diff --git a/app/Http/Controllers/V1/Admin/Update/MigrateUpdateController.php b/app/Http/Controllers/V1/Admin/Update/MigrateUpdateController.php new file mode 100644 index 000000000..6b8e0aa16 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Update/MigrateUpdateController.php @@ -0,0 +1,32 @@ +user()) || (! $request->user()->isOwner())) { + return response()->json([ + 'success' => false, + 'message' => 'You are not allowed to update this app.' + ], 401); + } + + Updater::migrateUpdate(); + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Admin/Update/UnzipUpdateController.php b/app/Http/Controllers/V1/Admin/Update/UnzipUpdateController.php new file mode 100644 index 000000000..e96279df5 --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Update/UnzipUpdateController.php @@ -0,0 +1,44 @@ +user()) || (! $request->user()->isOwner())) { + return response()->json([ + 'success' => false, + 'message' => 'You are not allowed to update this app.' + ], 401); + } + + $request->validate([ + 'path' => 'required', + ]); + + try { + $path = Updater::unzip($request->path); + + return response()->json([ + 'success' => true, + 'path' => $path, + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'error' => $e->getMessage(), + ], 500); + } + } +} diff --git a/app/Http/Controllers/V1/Update/UpdateController.php b/app/Http/Controllers/V1/Admin/Update/UpdateController.php similarity index 85% rename from app/Http/Controllers/V1/Update/UpdateController.php rename to app/Http/Controllers/V1/Admin/Update/UpdateController.php index 1339f7139..36ec30058 100644 --- a/app/Http/Controllers/V1/Update/UpdateController.php +++ b/app/Http/Controllers/V1/Admin/Update/UpdateController.php @@ -1,6 +1,6 @@ authorize('manage update app'); + $request->validate([ 'version' => 'required', ]); @@ -25,6 +27,8 @@ public function download(Request $request) public function unzip(Request $request) { + $this->authorize('manage update app'); + $request->validate([ 'path' => 'required', ]); @@ -46,6 +50,8 @@ public function unzip(Request $request) public function copyFiles(Request $request) { + $this->authorize('manage update app'); + $request->validate([ 'path' => 'required', ]); @@ -60,6 +66,8 @@ public function copyFiles(Request $request) public function migrate(Request $request) { + $this->authorize('manage update app'); + Updater::migrateUpdate(); return response()->json([ @@ -69,6 +77,8 @@ public function migrate(Request $request) public function finishUpdate(Request $request) { + $this->authorize('manage update app'); + $request->validate([ 'installed' => 'required', 'version' => 'required', @@ -81,6 +91,8 @@ public function finishUpdate(Request $request) public function checkLatestVersion(Request $request) { + $this->authorize('manage update app'); + set_time_limit(600); // 10 minutes $json = Updater::checkForUpdate(Setting::getSetting('version')); diff --git a/app/Http/Controllers/V1/Admin/Users/UsersController.php b/app/Http/Controllers/V1/Admin/Users/UsersController.php new file mode 100644 index 000000000..0b08c92ce --- /dev/null +++ b/app/Http/Controllers/V1/Admin/Users/UsersController.php @@ -0,0 +1,101 @@ +authorize('viewAny', User::class); + + $limit = $request->has('limit') ? $request->limit : 10; + + $user = $request->user(); + + $users = User::applyFilters($request->all()) + ->where('id', '<>', $user->id) + ->latest() + ->paginate($limit); + + return UserResource::collection($users) + ->additional(['meta' => [ + 'user_total_count' => User::count(), + ]]); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\UserRequest $request + * @return \Illuminate\Http\JsonResponse + */ + public function store(UserRequest $request) + { + $this->authorize('create', User::class); + + $user = User::createFromRequest($request); + + return new UserResource($user); + } + + /** + * Display the specified resource. + * + * @param \Crater\Models\User $user + * @return \Illuminate\Http\JsonResponse + */ + public function show(User $user) + { + $this->authorize('view', $user); + + return new UserResource($user); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\UserRequest $request + * @param \Crater\Models\User $user + * @return \Illuminate\Http\JsonResponse + */ + public function update(UserRequest $request, User $user) + { + $this->authorize('update', $user); + + $user->updateFromRequest($request); + + return new UserResource($user); + } + + /** + * Display a listing of the resource. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function delete(DeleteUserRequest $request) + { + $this->authorize('delete multiple users', User::class); + + if ($request->users) { + User::deleteUsers($request->users); + } + + return response()->json([ + 'success' => true, + ]); + } +} diff --git a/app/Http/Controllers/V1/Auth/LoginController.php b/app/Http/Controllers/V1/Auth/LoginController.php deleted file mode 100644 index c7eed90c5..000000000 --- a/app/Http/Controllers/V1/Auth/LoginController.php +++ /dev/null @@ -1,40 +0,0 @@ -middleware('guest')->except('logout'); - } -} diff --git a/app/Http/Controllers/V1/CustomField/CustomFieldsController.php b/app/Http/Controllers/V1/CustomField/CustomFieldsController.php deleted file mode 100644 index e8749450c..000000000 --- a/app/Http/Controllers/V1/CustomField/CustomFieldsController.php +++ /dev/null @@ -1,102 +0,0 @@ -has('limit') ? $request->limit : 5; - - $customFields = CustomField::whereCompany($request->header('company')) - ->applyFilters($request->only([ - 'type', - 'search', - ])) - ->latest() - ->paginateData($limit); - - - return response()->json([ - 'customFields' => $customFields, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\CustomFieldRequest $request - * @return \Illuminate\Http\Response - */ - public function store(CustomFieldRequest $request) - { - $customField = CustomField::createCustomField($request); - - return response()->json([ - 'customField' => $customField, - 'success' => true, - ]); - } - - /** - * Display the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function show(CustomField $customField) - { - return response()->json([ - 'customField' => $customField, - 'success' => true, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ - public function update(CustomFieldRequest $request, CustomField $customField) - { - $customField->updateCustomField($request); - - return response()->json([ - 'customField' => $customField, - 'success' => true, - ]); - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function destroy(CustomField $customField) - { - if ($customField->customFieldValue()->exists()) { - return response()->json([ - 'error' => 'values_attached', - ]); - } - - $customField->delete(); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Customer/CustomerStatsController.php b/app/Http/Controllers/V1/Customer/CustomerStatsController.php deleted file mode 100644 index 027f54bbd..000000000 --- a/app/Http/Controllers/V1/Customer/CustomerStatsController.php +++ /dev/null @@ -1,146 +0,0 @@ -header('company')); - $startDate = Carbon::now(); - $start = Carbon::now(); - $end = Carbon::now(); - $terms = explode('-', $fiscalYear); - - if ($terms[0] <= $start->month) { - $startDate->month($terms[0])->startOfMonth(); - $start->month($terms[0])->startOfMonth(); - $end->month($terms[0])->endOfMonth(); - } else { - $startDate->subYear()->month($terms[0])->startOfMonth(); - $start->subYear()->month($terms[0])->startOfMonth(); - $end->subYear()->month($terms[0])->endOfMonth(); - } - - if ($request->has('previous_year')) { - $startDate->subYear()->startOfMonth(); - $start->subYear()->startOfMonth(); - $end->subYear()->endOfMonth(); - } - while ($monthCounter < 12) { - array_push( - $invoiceTotals, - Invoice::whereBetween( - 'invoice_date', - [$start->format('Y-m-d'), $end->format('Y-m-d')] - ) - ->whereCompany($request->header('company')) - ->whereCustomer($customer->id) - ->sum('total') ?? 0 - ); - array_push( - $expenseTotals, - Expense::whereBetween( - 'expense_date', - [$start->format('Y-m-d'), $end->format('Y-m-d')] - ) - ->whereCompany($request->header('company')) - ->whereUser($customer->id) - ->sum('amount') ?? 0 - ); - array_push( - $receiptTotals, - Payment::whereBetween( - 'payment_date', - [$start->format('Y-m-d'), $end->format('Y-m-d')] - ) - ->whereCompany($request->header('company')) - ->whereCustomer($customer->id) - ->sum('amount') ?? 0 - ); - array_push( - $netProfits, - ($receiptTotals[$i] - $expenseTotals[$i]) - ); - $i++; - array_push($months, $start->format('M')); - $monthCounter++; - $end->startOfMonth(); - $start->addMonth()->startOfMonth(); - $end->addMonth()->endOfMonth(); - } - - $start->subMonth()->endOfMonth(); - - $salesTotal = Invoice::whereCompany($request->header('company')) - ->whereBetween( - 'invoice_date', - [$startDate->format('Y-m-d'), $start->format('Y-m-d')] - ) - ->whereCustomer($customer->id) - ->sum('total'); - $totalReceipts = Payment::whereCompany($request->header('company')) - ->whereBetween( - 'payment_date', - [$startDate->format('Y-m-d'), $start->format('Y-m-d')] - ) - ->whereCustomer($customer->id) - ->sum('amount'); - $totalExpenses = Expense::whereCompany($request->header('company')) - ->whereBetween( - 'expense_date', - [$startDate->format('Y-m-d'), $start->format('Y-m-d')] - ) - ->whereUser($customer->id) - ->sum('amount'); - $netProfit = (int) $totalReceipts - (int) $totalExpenses; - - $chartData = [ - 'months' => $months, - 'invoiceTotals' => $invoiceTotals, - 'expenseTotals' => $expenseTotals, - 'receiptTotals' => $receiptTotals, - 'netProfit' => $netProfit, - 'netProfits' => $netProfits, - 'salesTotal' => $salesTotal, - 'totalReceipts' => $totalReceipts, - 'totalExpenses' => $totalExpenses, - ]; - - $customer = User::with([ - 'billingAddress', - 'shippingAddress', - 'billingAddress.country', - 'shippingAddress.country', - 'currency', - 'fields.customField', - ])->find($customer->id); - - return response()->json([ - 'customer' => $customer, - 'chartData' => $chartData, - ]); - } -} diff --git a/app/Http/Controllers/V1/Customer/CustomersController.php b/app/Http/Controllers/V1/Customer/CustomersController.php deleted file mode 100644 index 71f481f71..000000000 --- a/app/Http/Controllers/V1/Customer/CustomersController.php +++ /dev/null @@ -1,120 +0,0 @@ -has('limit') ? $request->limit : 10; - - $customers = User::with('creator') - ->customer() - ->applyFilters($request->only([ - 'search', - 'contact_name', - 'display_name', - 'phone', - 'customer_id', - 'orderByField', - 'orderBy', - ])) - ->whereCompany($request->header('company')) - ->select( - 'users.*', - DB::raw('sum(invoices.due_amount) as due_amount') - ) - ->groupBy('users.id') - ->leftJoin('invoices', 'users.id', '=', 'invoices.user_id') - ->paginateData($limit); - - return response()->json([ - 'customers' => $customers, - 'customerTotalCount' => User::whereRole('customer')->count(), - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function store(Requests\CustomerRequest $request) - { - $customer = User::createCustomer($request); - - return response()->json([ - 'customer' => $customer, - 'success' => true, - ]); - } - - /** - * Display the specified resource. - * - * @param User $customer - * @return \Illuminate\Http\JsonResponse - */ - public function show(User $customer) - { - $customer->load([ - 'billingAddress.country', - 'shippingAddress.country', - 'fields.customField', - 'creator', - ]); - - $currency = $customer->currency; - - return response()->json([ - 'customer' => $customer, - 'currency' => $currency, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param \Crater\Models\User $customer - * @return \Illuminate\Http\JsonResponse - */ - public function update(Requests\CustomerRequest $request, User $customer) - { - $customer = User::updateCustomer($request, $customer); - - $customer = User::with('billingAddress', 'shippingAddress', 'fields')->find($customer->id); - - return response()->json([ - 'customer' => $customer, - 'success' => true, - ]); - } - - /** - * Remove a list of Customers along side all their resources (ie. Estimates, Invoices, Payments and Addresses) - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function delete(Request $request) - { - User::deleteCustomers($request->ids); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Customer/EstimatePdfController.php b/app/Http/Controllers/V1/Customer/EstimatePdfController.php new file mode 100644 index 000000000..7c6e9bce3 --- /dev/null +++ b/app/Http/Controllers/V1/Customer/EstimatePdfController.php @@ -0,0 +1,43 @@ +status == Estimate::STATUS_SENT || $estimate->status == Estimate::STATUS_DRAFT)) { + $estimate->status = Estimate::STATUS_VIEWED; + $estimate->save(); + $notifyEstimateViewed = CompanySetting::getSetting( + 'notify_estimate_viewed', + $estimate->company_id + ); + + if ($notifyEstimateViewed == 'YES') { + $data['estimate'] = Estimate::findOrFail($estimate->id)->toArray(); + $data['user'] = Customer::find($estimate->customer_id)->toArray(); + $notificationEmail = CompanySetting::getSetting( + 'notification_email', + $estimate->company_id + ); + + \Mail::to($notificationEmail)->send(new EstimateViewedMail($data)); + } + } + + return $estimate->getGeneratedPDFOrStream('estimate'); + } +} diff --git a/app/Http/Controllers/V1/Customer/InvoicePdfController.php b/app/Http/Controllers/V1/Customer/InvoicePdfController.php new file mode 100644 index 000000000..f7b891f0f --- /dev/null +++ b/app/Http/Controllers/V1/Customer/InvoicePdfController.php @@ -0,0 +1,44 @@ +status == Invoice::STATUS_SENT || $invoice->status == Invoice::STATUS_DRAFT)) { + $invoice->status = Invoice::STATUS_VIEWED; + $invoice->viewed = true; + $invoice->save(); + $notifyInvoiceViewed = CompanySetting::getSetting( + 'notify_invoice_viewed', + $invoice->company_id + ); + + if ($notifyInvoiceViewed == 'YES') { + $data['invoice'] = Invoice::findOrFail($invoice->id)->toArray(); + $data['user'] = Customer::find($invoice->customer_id)->toArray(); + $notificationEmail = CompanySetting::getSetting( + 'notification_email', + $invoice->company_id + ); + + \Mail::to($notificationEmail)->send(new InvoiceViewedMail($data)); + } + } + + return $invoice->getGeneratedPDFOrStream('invoice'); + } +} diff --git a/app/Http/Controllers/V1/Dashboard/DashboardChartController.php b/app/Http/Controllers/V1/Dashboard/DashboardChartController.php deleted file mode 100644 index 7dc9530c0..000000000 --- a/app/Http/Controllers/V1/Dashboard/DashboardChartController.php +++ /dev/null @@ -1,32 +0,0 @@ -whereCompany($request->header('company')) - ->expensesAttributes() - ->get(); - - $amounts = $expensesCategories->pluck('total_amount'); - $names = $expensesCategories->pluck('category.name'); - - return response()->json([ - 'amounts' => $amounts, - 'categories' => $names, - ]); - } -} diff --git a/app/Http/Controllers/V1/Dashboard/DashboardController.php b/app/Http/Controllers/V1/Dashboard/DashboardController.php deleted file mode 100644 index 79f8cb47b..000000000 --- a/app/Http/Controllers/V1/Dashboard/DashboardController.php +++ /dev/null @@ -1,157 +0,0 @@ -header('company')); - $startDate = Carbon::now(); - $start = Carbon::now(); - $end = Carbon::now(); - $terms = explode('-', $fiscalYear); - - if ($terms[0] <= $start->month) { - $startDate->month($terms[0])->startOfMonth(); - $start->month($terms[0])->startOfMonth(); - $end->month($terms[0])->endOfMonth(); - } else { - $startDate->subYear()->month($terms[0])->startOfMonth(); - $start->subYear()->month($terms[0])->startOfMonth(); - $end->subYear()->month($terms[0])->endOfMonth(); - } - - if ($request->has('previous_year')) { - $startDate->subYear()->startOfMonth(); - $start->subYear()->startOfMonth(); - $end->subYear()->endOfMonth(); - } - - while ($monthCounter < 12) { - array_push( - $invoiceTotals, - Invoice::whereBetween( - 'invoice_date', - [$start->format('Y-m-d'), $end->format('Y-m-d')] - ) - ->where('status', '!=', Invoice::STATUS_DRAFT) - ->whereCompany($request->header('company')) - ->sum('total') - ); - array_push( - $expenseTotals, - Expense::whereBetween( - 'expense_date', - [$start->format('Y-m-d'), $end->format('Y-m-d')] - ) - ->whereCompany($request->header('company')) - ->sum('amount') - ); - array_push( - $receiptTotals, - Payment::whereBetween( - 'payment_date', - [$start->format('Y-m-d'), $end->format('Y-m-d')] - ) - ->whereCompany($request->header('company')) - ->sum('amount') - ); - array_push( - $netProfits, - ($receiptTotals[$i] - $expenseTotals[$i]) - ); - $i++; - array_push($months, $start->format('M')); - $monthCounter++; - $end->startOfMonth(); - $start->addMonth()->startOfMonth(); - $end->addMonth()->endOfMonth(); - } - - $start->subMonth()->endOfMonth(); - - $salesTotal = Invoice::whereCompany($request->header('company')) - ->where('status', '!=', Invoice::STATUS_DRAFT) - ->whereBetween( - 'invoice_date', - [$startDate->format('Y-m-d'), $start->format('Y-m-d')] - ) - ->sum('total'); - $totalReceipts = Payment::whereCompany($request->header('company')) - ->whereBetween( - 'payment_date', - [$startDate->format('Y-m-d'), $start->format('Y-m-d')] - ) - ->sum('amount'); - $totalExpenses = Expense::whereCompany($request->header('company')) - ->whereBetween( - 'expense_date', - [$startDate->format('Y-m-d'), $start->format('Y-m-d')] - ) - ->sum('amount'); - $netProfit = (int)$totalReceipts - (int)$totalExpenses; - - $chartData = [ - 'months' => $months, - 'invoiceTotals' => $invoiceTotals, - 'expenseTotals' => $expenseTotals, - 'receiptTotals' => $receiptTotals, - 'netProfits' => $netProfits, - ]; - - $customersCount = User::customer()->whereCompany($request->header('company'))->count(); - $invoicesCount = Invoice::whereCompany($request->header('company')) - ->where('status', '!=', Invoice::STATUS_DRAFT) - ->count(); - $estimatesCount = Estimate::whereCompany($request->header('company'))->count(); - $totalDueAmount = Invoice::whereCompany($request->header('company')) - ->where('status', '!=', Invoice::STATUS_DRAFT) - ->sum('due_amount'); - $dueInvoices = Invoice::with('user') - ->whereCompany($request->header('company')) - ->where('status', '!=', Invoice::STATUS_DRAFT) - ->where('due_amount', '>', 0) - ->take(5) - ->latest() - ->get(); - $estimates = Estimate::with('user')->whereCompany($request->header('company'))->take(5)->latest()->get(); - - return response()->json([ - 'dueInvoices' => $dueInvoices, - 'estimates' => $estimates, - 'estimatesCount' => $estimatesCount, - 'totalDueAmount' => $totalDueAmount, - 'invoicesCount' => $invoicesCount, - 'customersCount' => $customersCount, - 'chartData' => $chartData, - 'salesTotal' => $salesTotal, - 'totalReceipts' => $totalReceipts, - 'totalExpenses' => $totalExpenses, - 'netProfit' => $netProfit, - ]); - } -} diff --git a/app/Http/Controllers/V1/Estimate/ConvertEstimateController.php b/app/Http/Controllers/V1/Estimate/ConvertEstimateController.php deleted file mode 100644 index 099f09c0a..000000000 --- a/app/Http/Controllers/V1/Estimate/ConvertEstimateController.php +++ /dev/null @@ -1,94 +0,0 @@ -load(['items', 'items.taxes', 'user', 'taxes']); - - $invoice_date = Carbon::now(); - $due_date = Carbon::now()->addDays(7); - - $invoice_prefix = CompanySetting::getSetting( - 'invoice_prefix', - $request->header('company') - ); - - $invoice = Invoice::create([ - 'creator_id' => Auth::id(), - 'invoice_date' => $invoice_date->format('Y-m-d'), - 'due_date' => $due_date->format('Y-m-d'), - 'invoice_number' => $invoice_prefix."-".Invoice::getNextInvoiceNumber($invoice_prefix), - 'reference_number' => $estimate->reference_number, - 'user_id' => $estimate->user_id, - 'company_id' => $request->header('company'), - 'template_name' => 'invoice1', - 'status' => Invoice::STATUS_DRAFT, - 'paid_status' => Invoice::STATUS_UNPAID, - 'sub_total' => $estimate->sub_total, - 'discount' => $estimate->discount, - 'discount_type' => $estimate->discount_type, - 'discount_val' => $estimate->discount_val, - 'total' => $estimate->total, - 'due_amount' => $estimate->total, - 'tax_per_item' => $estimate->tax_per_item, - 'discount_per_item' => $estimate->discount_per_item, - 'tax' => $estimate->tax, - 'notes' => $estimate->notes, - 'unique_hash' => str_random(60), - ]); - - $invoiceItems = $estimate->items->toArray(); - - foreach ($invoiceItems as $invoiceItem) { - $invoiceItem['company_id'] = $request->header('company'); - $invoiceItem['name'] = $invoiceItem['name']; - $item = $invoice->items()->create($invoiceItem); - - if (array_key_exists('taxes', $invoiceItem) && $invoiceItem['taxes']) { - foreach ($invoiceItem['taxes'] as $tax) { - $tax['company_id'] = $request->header('company'); - - if ($tax['amount']) { - $item->taxes()->create($tax); - } - } - } - } - - if ($estimate->taxes) { - foreach ($estimate->taxes->toArray() as $tax) { - $tax['company_id'] = $request->header('company'); - unset($tax['estimate_id']); - $invoice->taxes()->create($tax); - } - } - - $invoice = Invoice::with([ - 'items', - 'user', - 'taxes' - ])->find($invoice->id); - - return response()->json([ - 'invoice' => $invoice, - ]); - } -} diff --git a/app/Http/Controllers/V1/Estimate/EstimatePdfController.php b/app/Http/Controllers/V1/Estimate/EstimatePdfController.php deleted file mode 100644 index 77220a1db..000000000 --- a/app/Http/Controllers/V1/Estimate/EstimatePdfController.php +++ /dev/null @@ -1,20 +0,0 @@ -getGeneratedPDFOrStream('estimate'); - } -} diff --git a/app/Http/Controllers/V1/Estimate/EstimateTemplatesController.php b/app/Http/Controllers/V1/Estimate/EstimateTemplatesController.php deleted file mode 100644 index d7e78c77c..000000000 --- a/app/Http/Controllers/V1/Estimate/EstimateTemplatesController.php +++ /dev/null @@ -1,33 +0,0 @@ -files('/app/pdf/estimate'); - $estimateTemplates = []; - - foreach ($templates as $key => $template) { - $templateName = Str::before(basename($template), '.blade.php'); - $estimateTemplates[$key]['name'] = $templateName; - $estimateTemplates[$key]['path'] = asset('assets/img/PDF/'.$templateName.'.png'); - } - - return response()->json([ - 'templates' => $estimateTemplates - ]); - } -} diff --git a/app/Http/Controllers/V1/Estimate/EstimatesController.php b/app/Http/Controllers/V1/Estimate/EstimatesController.php deleted file mode 100644 index 6f14bc6d8..000000000 --- a/app/Http/Controllers/V1/Estimate/EstimatesController.php +++ /dev/null @@ -1,102 +0,0 @@ -has('limit') ? $request->limit : 10; - - $estimates = Estimate::with([ - 'items', - 'user', - 'taxes', - 'creator', - ]) - ->join('users', 'users.id', '=', 'estimates.user_id') - ->applyFilters($request->only([ - 'status', - 'customer_id', - 'estimate_id', - 'estimate_number', - 'from_date', - 'to_date', - 'search', - 'orderByField', - 'orderBy', - ])) - ->whereCompany($request->header('company')) - ->select('estimates.*', 'users.name') - ->latest() - ->paginateData($limit); - - $siteData = [ - 'estimates' => $estimates, - 'estimateTotalCount' => Estimate::count(), - ]; - - return response()->json($siteData); - } - - public function store(EstimatesRequest $request) - { - $estimate = Estimate::createEstimate($request); - - if ($request->has('estimateSend')) { - $estimate->send($request->title, $request->body); - } - - GenerateEstimatePdfJob::dispatch($estimate); - - return response()->json([ - 'estimate' => $estimate, - ]); - } - - public function show(Request $request, Estimate $estimate) - { - $estimate->load([ - 'items', - 'items.taxes', - 'user', - 'creator', - 'taxes', - 'taxes.taxType', - 'fields.customField', - ]); - - return response()->json([ - 'estimate' => $estimate, - 'nextEstimateNumber' => $estimate->getEstimateNumAttribute(), - 'estimatePrefix' => $estimate->getEstimatePrefixAttribute(), - ]); - } - - public function update(EstimatesRequest $request, Estimate $estimate) - { - $estimate = $estimate->updateEstimate($request); - - GenerateEstimatePdfJob::dispatch($estimate, true); - - return response()->json([ - 'estimate' => $estimate, - ]); - } - - public function delete(DeleteEstimatesRequest $request) - { - Estimate::destroy($request->ids); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Expense/ExpenseCategoriesController.php b/app/Http/Controllers/V1/Expense/ExpenseCategoriesController.php deleted file mode 100644 index 3bfc7f1a2..000000000 --- a/app/Http/Controllers/V1/Expense/ExpenseCategoriesController.php +++ /dev/null @@ -1,102 +0,0 @@ -has('limit') ? $request->limit : 5; - - $categories = ExpenseCategory::whereCompany($request->header('company')) - ->applyFilters($request->only([ - 'category_id', - 'search', - ])) - ->latest() - ->paginateData($limit); - - return response()->json([ - 'categories' => $categories, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(ExpenseCategoryRequest $request) - { - $data = $request->validated(); - $data['company_id'] = $request->header('company'); - $category = ExpenseCategory::create($data); - - return response()->json([ - 'category' => $category, - 'success' => true, - ]); - } - - /** - * Display the specified resource. - * - * @param \Crater\Models\ExpenseCategory $category - * @return \Illuminate\Http\Response - */ - public function show(ExpenseCategory $category) - { - return response()->json([ - 'category' => $category, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param \Crater\Models\ExpenseCategory $ExpenseCategory - * @return \Illuminate\Http\Response - */ - public function update(ExpenseCategoryRequest $request, ExpenseCategory $category) - { - $category->update($request->validated()); - - return response()->json([ - 'category' => $category, - 'success' => true, - ]); - } - - /** - * Remove the specified resource from storage. - * - * @param \Crater\ExpensesCategory $category - * @return \Illuminate\Http\Response - */ - public function destroy(ExpenseCategory $category) - { - if ($category->expenses() && $category->expenses()->count() > 0) { - return response()->json([ - 'success' => false, - ]); - } - - $category->delete(); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Expense/ExpensesController.php b/app/Http/Controllers/V1/Expense/ExpensesController.php deleted file mode 100644 index bb7495522..000000000 --- a/app/Http/Controllers/V1/Expense/ExpensesController.php +++ /dev/null @@ -1,101 +0,0 @@ -has('limit') ? $request->limit : 10; - - $expenses = Expense::with('category', 'creator', 'fields') - ->leftJoin('users', 'users.id', '=', 'expenses.user_id') - ->join('expense_categories', 'expense_categories.id', '=', 'expenses.expense_category_id') - ->applyFilters($request->only([ - 'expense_category_id', - 'user_id', - 'expense_id', - 'search', - 'from_date', - 'to_date', - 'orderByField', - 'orderBy', - ])) - ->whereCompany($request->header('company')) - ->select('expenses.*', 'expense_categories.name', 'users.name as user_name') - ->paginateData($limit); - - return response()->json([ - 'expenses' => $expenses, - 'expenseTotalCount' => Expense::count(), - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function store(ExpenseRequest $request) - { - $expense = Expense::createExpense($request); - - return response()->json([ - 'expense' => $expense, - 'success' => true, - ]); - } - - /** - * Display the specified resource. - * - * @param \Crater\Models\Expense $expense - * @return \Illuminate\Http\JsonResponse - */ - public function show(Expense $expense) - { - $expense->load('creator', 'fields.customField'); - - return response()->json([ - 'expense' => $expense, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param \Crater\Models\Expense $expense - * @return \Illuminate\Http\JsonResponse - */ - public function update(ExpenseRequest $request, Expense $expense) - { - $expense->updateExpense($request); - - return response()->json([ - 'expense' => $expense, - 'success' => true, - ]); - } - - public function delete(DeleteExpensesRequest $request) - { - Expense::destroy($request->ids); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Expense/ShowReceiptController.php b/app/Http/Controllers/V1/Expense/ShowReceiptController.php deleted file mode 100644 index f6285e8fb..000000000 --- a/app/Http/Controllers/V1/Expense/ShowReceiptController.php +++ /dev/null @@ -1,40 +0,0 @@ -getFirstMedia('receipts'); - if ($media) { - $imagePath = $media->getPath(); - } else { - return response()->json([ - 'error' => 'receipt_does_not_exist', - ]); - } - } - - $type = \File::mimeType($imagePath); - - $image = 'data:'.$type.';base64,'.base64_encode(file_get_contents($imagePath)); - - return response()->json([ - 'image' => $image, - 'type' => $type, - ]); - } -} diff --git a/app/Http/Controllers/V1/General/BootstrapController.php b/app/Http/Controllers/V1/General/BootstrapController.php deleted file mode 100644 index 821e3b32f..000000000 --- a/app/Http/Controllers/V1/General/BootstrapController.php +++ /dev/null @@ -1,53 +0,0 @@ -getSettings(['language']); - - $default_language = array_key_exists('language', $default_language) ? $default_language['language'] : 'en'; - - $settings = [ - 'moment_date_format', - 'carbon_date_format', - 'fiscal_year', - 'time_zone', - 'currency', - ]; - - $settings = CompanySetting::getSettings($settings, $user->company_id); - - $default_currency = Currency::findOrFail($settings['currency']); - - return response()->json([ - 'user' => $user, - 'company' => $user->company, - 'currencies' => Currency::all(), - 'countries' => Country::all(), - 'default_currency' => $default_currency, - 'default_language' => $default_language, - 'moment_date_format' => $settings['moment_date_format'], - 'carbon_date_format' => $settings['carbon_date_format'], - 'fiscal_year' => $settings['fiscal_year'], - 'time_zone' => $settings['time_zone'], - ]); - } -} diff --git a/app/Http/Controllers/V1/General/CountriesController.php b/app/Http/Controllers/V1/General/CountriesController.php deleted file mode 100644 index 4c03e46a6..000000000 --- a/app/Http/Controllers/V1/General/CountriesController.php +++ /dev/null @@ -1,23 +0,0 @@ -json([ - 'countries' => Country::all(), - ]); - } -} diff --git a/app/Http/Controllers/V1/General/CurrenciesController.php b/app/Http/Controllers/V1/General/CurrenciesController.php deleted file mode 100644 index edbbe500d..000000000 --- a/app/Http/Controllers/V1/General/CurrenciesController.php +++ /dev/null @@ -1,25 +0,0 @@ -get(); - - return response()->json([ - 'currencies' => $currencies, - ]); - } -} diff --git a/app/Http/Controllers/V1/General/NextNumberController.php b/app/Http/Controllers/V1/General/NextNumberController.php deleted file mode 100644 index 7ab5a49ee..000000000 --- a/app/Http/Controllers/V1/General/NextNumberController.php +++ /dev/null @@ -1,58 +0,0 @@ -key; - - $val = $key.'_prefix'; - - $prefix = CompanySetting::getSetting( - $val, - $request->header('company') - ); - - $nextNumber = null; - - switch ($key) { - case 'invoice': - $nextNumber = Invoice::getNextInvoiceNumber($prefix); - - break; - - case 'estimate': - $nextNumber = Estimate::getNextEstimateNumber($prefix); - - break; - - case 'payment': - $nextNumber = Payment::getNextPaymentNumber($prefix); - - break; - - default: - return; - } - - return response()->json([ - 'nextNumber' => $nextNumber, - 'prefix' => $prefix, - ]); - } -} diff --git a/app/Http/Controllers/V1/General/NotesController.php b/app/Http/Controllers/V1/General/NotesController.php deleted file mode 100644 index b5f0fd9ca..000000000 --- a/app/Http/Controllers/V1/General/NotesController.php +++ /dev/null @@ -1,88 +0,0 @@ -limit ?? 10; - - $notes = Note::latest() - ->applyFilters($request->only(['type', 'search'])) - ->paginate($limit); - - return response()->json([ - 'notes' => $notes, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(NotesRequest $request) - { - $note = Note::create($request->validated()); - - return response()->json([ - 'note' => $note, - ]); - } - - /** - * Display the specified resource. - * - * @param \Crater\Models\Note $note - * @return \Illuminate\Http\Response - */ - public function show(Note $note) - { - return response()->json([ - 'note' => $note, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param \Crater\Models\Note $note - * @return \Illuminate\Http\Response - */ - public function update(NotesRequest $request, Note $note) - { - $note->update($request->validated()); - - return response()->json([ - 'note' => $note, - ]); - } - - /** - * Remove the specified resource from storage. - * - * @param \Crater\Models\Note $note - * @return \Illuminate\Http\Response - */ - public function destroy(Note $note) - { - $note->delete(); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/General/SearchController.php b/app/Http/Controllers/V1/General/SearchController.php deleted file mode 100644 index 00602de58..000000000 --- a/app/Http/Controllers/V1/General/SearchController.php +++ /dev/null @@ -1,37 +0,0 @@ -applyFilters($request->only(['search'])) - ->latest() - ->paginate(10); - - if (Auth::user()->role == 'super admin') { - $users = User::where('role', 'admin') - ->applyFilters($request->only(['search'])) - ->latest() - ->paginate(10); - } - - return response()->json([ - 'customers' => $customers, - 'users' => $users ?? [], - ]); - } -} diff --git a/app/Http/Controllers/V1/Onboarding/AppDomainController.php b/app/Http/Controllers/V1/Installation/AppDomainController.php similarity index 89% rename from app/Http/Controllers/V1/Onboarding/AppDomainController.php rename to app/Http/Controllers/V1/Installation/AppDomainController.php index b2571f481..30b871ef7 100644 --- a/app/Http/Controllers/V1/Onboarding/AppDomainController.php +++ b/app/Http/Controllers/V1/Installation/AppDomainController.php @@ -1,6 +1,6 @@ json([ - 'success' => false, + 'success' => true, ]); } } diff --git a/app/Http/Controllers/V1/Onboarding/DatabaseConfigurationController.php b/app/Http/Controllers/V1/Installation/DatabaseConfigurationController.php similarity index 97% rename from app/Http/Controllers/V1/Onboarding/DatabaseConfigurationController.php rename to app/Http/Controllers/V1/Installation/DatabaseConfigurationController.php index a6ec89544..718c5b061 100644 --- a/app/Http/Controllers/V1/Onboarding/DatabaseConfigurationController.php +++ b/app/Http/Controllers/V1/Installation/DatabaseConfigurationController.php @@ -1,6 +1,6 @@ permissions = $checker; + } + + /** + * Display the permissions check page. + * + * @return JsonResponse + */ + public function permissions() + { + $permissions = $this->permissions->check( + config('installer.permissions') + ); + + return response()->json([ + 'permissions' => $permissions, + ]); + } +} diff --git a/app/Http/Controllers/V1/Onboarding/FinishController.php b/app/Http/Controllers/V1/Installation/FinishController.php similarity index 90% rename from app/Http/Controllers/V1/Onboarding/FinishController.php rename to app/Http/Controllers/V1/Installation/FinishController.php index ce82f3260..2db8af10f 100644 --- a/app/Http/Controllers/V1/Onboarding/FinishController.php +++ b/app/Http/Controllers/V1/Installation/FinishController.php @@ -1,6 +1,6 @@ first(); + Auth::login($user); + + return response()->json([ + 'success' => true, + 'user' => $user, + 'company' => $user->companies()->first() + ]); + } +} diff --git a/app/Http/Controllers/V1/Onboarding/OnboardingWizardController.php b/app/Http/Controllers/V1/Installation/OnboardingWizardController.php similarity index 95% rename from app/Http/Controllers/V1/Onboarding/OnboardingWizardController.php rename to app/Http/Controllers/V1/Installation/OnboardingWizardController.php index e3d7df79e..c353b84c1 100644 --- a/app/Http/Controllers/V1/Onboarding/OnboardingWizardController.php +++ b/app/Http/Controllers/V1/Installation/OnboardingWizardController.php @@ -1,6 +1,6 @@ header('company') - ); - - $newInvoice = Invoice::create([ - 'invoice_date' => $date->format('Y-m-d'), - 'due_date' => $date->format('Y-m-d'), - 'invoice_number' => $invoice_prefix."-".Invoice::getNextInvoiceNumber($invoice_prefix), - 'reference_number' => $invoice->reference_number, - 'user_id' => $invoice->user_id, - 'company_id' => $request->header('company'), - 'template_name' => 'invoice1', - 'status' => Invoice::STATUS_DRAFT, - 'paid_status' => Invoice::STATUS_UNPAID, - 'sub_total' => $invoice->sub_total, - 'discount' => $invoice->discount, - 'discount_type' => $invoice->discount_type, - 'discount_val' => $invoice->discount_val, - 'total' => $invoice->total, - 'due_amount' => $invoice->total, - 'tax_per_item' => $invoice->tax_per_item, - 'discount_per_item' => $invoice->discount_per_item, - 'tax' => $invoice->tax, - 'notes' => $invoice->notes, - 'unique_hash' => str_random(60), - ]); - - $invoice->load('items.taxes'); - - $invoiceItems = $invoice->items->toArray(); - - foreach ($invoiceItems as $invoiceItem) { - $invoiceItem['company_id'] = $request->header('company'); - $invoiceItem['name'] = $invoiceItem['name']; - $item = $newInvoice->items()->create($invoiceItem); - - if (array_key_exists('taxes', $invoiceItem) && $invoiceItem['taxes']) { - foreach ($invoiceItem['taxes'] as $tax) { - $tax['company_id'] = $request->header('company'); - - if ($tax['amount']) { - $item->taxes()->create($tax); - } - } - } - } - - if ($invoice->taxes) { - foreach ($invoice->taxes->toArray() as $tax) { - $tax['company_id'] = $request->header('company'); - $newInvoice->taxes()->create($tax); - } - } - - $newInvoice = Invoice::with([ - 'items', - 'user', - 'taxes' - ]) - ->find($newInvoice->id); - - return response()->json([ - 'invoice' => $newInvoice, - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Invoice/InvoicePdfController.php b/app/Http/Controllers/V1/Invoice/InvoicePdfController.php deleted file mode 100644 index ac6169df0..000000000 --- a/app/Http/Controllers/V1/Invoice/InvoicePdfController.php +++ /dev/null @@ -1,20 +0,0 @@ -getGeneratedPDFOrStream('invoice'); - } -} diff --git a/app/Http/Controllers/V1/Invoice/InvoiceTemplatesController.php b/app/Http/Controllers/V1/Invoice/InvoiceTemplatesController.php deleted file mode 100644 index 73729c6d3..000000000 --- a/app/Http/Controllers/V1/Invoice/InvoiceTemplatesController.php +++ /dev/null @@ -1,33 +0,0 @@ -files('/app/pdf/invoice'); - $invoiceTemplates = []; - - foreach ($templates as $key => $template) { - $templateName = Str::before(basename($template), '.blade.php'); - $invoiceTemplates[$key]['name'] = $templateName; - $invoiceTemplates[$key]['path'] = asset('assets/img/PDF/'.$templateName.'.png'); - } - - return response()->json([ - 'invoiceTemplates' => $invoiceTemplates, - ]); - } -} diff --git a/app/Http/Controllers/V1/Invoice/InvoicesController.php b/app/Http/Controllers/V1/Invoice/InvoicesController.php deleted file mode 100644 index c16eac1ac..000000000 --- a/app/Http/Controllers/V1/Invoice/InvoicesController.php +++ /dev/null @@ -1,127 +0,0 @@ -has('limit') ? $request->limit : 10; - - $invoices = Invoice::with(['items', 'user', 'creator', 'taxes']) - ->join('users', 'users.id', '=', 'invoices.user_id') - ->applyFilters($request->only([ - 'status', - 'paid_status', - 'customer_id', - 'invoice_id', - 'invoice_number', - 'from_date', - 'to_date', - 'orderByField', - 'orderBy', - 'search', - ])) - ->whereCompany($request->header('company')) - ->select('invoices.*', 'users.name') - ->latest() - ->paginateData($limit); - - return response()->json([ - 'invoices' => $invoices, - 'invoiceTotalCount' => Invoice::count(), - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function store(Requests\InvoicesRequest $request) - { - $invoice = Invoice::createInvoice($request); - - if ($request->has('invoiceSend')) { - $invoice->send($request->subject, $request->body); - } - - GenerateInvoicePdfJob::dispatch($invoice); - - return response()->json([ - 'invoice' => $invoice, - ]); - } - - /** - * Display the specified resource. - * - * @param \Crater\Models\Invoice $invoice - * @return \Illuminate\Http\JsonResponse - */ - public function show(Invoice $invoice) - { - $invoice->load([ - 'items', - 'items.taxes', - 'user', - 'taxes.taxType', - 'fields.customField', - ]); - - $siteData = [ - 'invoice' => $invoice, - 'nextInvoiceNumber' => $invoice->getInvoiceNumAttribute(), - 'invoicePrefix' => $invoice->getInvoicePrefixAttribute(), - ]; - - return response()->json($siteData); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param Invoice $invoice - * @return \Illuminate\Http\JsonResponse - */ - public function update(Requests\InvoicesRequest $request, Invoice $invoice) - { - $invoice = $invoice->updateInvoice($request); - - GenerateInvoicePdfJob::dispatch($invoice, true); - - return response()->json([ - 'invoice' => $invoice, - 'success' => true, - ]); - } - - /** - * delete the specified resources in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function delete(DeleteInvoiceRequest $request) - { - Invoice::destroy($request->ids); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Item/ItemsController.php b/app/Http/Controllers/V1/Item/ItemsController.php deleted file mode 100644 index 973fd82d3..000000000 --- a/app/Http/Controllers/V1/Item/ItemsController.php +++ /dev/null @@ -1,106 +0,0 @@ -has('limit') ? $request->limit : 10; - - $items = Item::with(['taxes', 'creator']) - ->leftJoin('units', 'units.id', '=', 'items.unit_id') - ->applyFilters($request->only([ - 'search', - 'price', - 'unit_id', - 'item_id', - 'orderByField', - 'orderBy', - ])) - ->whereCompany($request->header('company')) - ->select('items.*', 'units.name as unit_name') - ->latest() - ->paginateData($limit); - - return response()->json([ - 'items' => $items, - 'taxTypes' => TaxType::latest()->get(), - 'itemTotalCount' => Item::count(), - ]); - } - - /** - * Create Item. - * - * @param Crater\Http\Requests\ItemsRequest $request - * @return \Illuminate\Http\JsonResponse - */ - public function store(Requests\ItemsRequest $request) - { - $item = Item::createItem($request); - - return response()->json([ - 'item' => $item, - ]); - } - - /** - * get an existing Item. - * - * @param Item $item - * @return \Illuminate\Http\JsonResponse - */ - public function show(Item $item) - { - $item->load('taxes'); - - return response()->json([ - 'item' => $item, - ]); - } - - /** - * Update an existing Item. - * - * @param Crater\Http\Requests\ItemsRequest $request - * @param \Crater\Models\Item $item - * @return \Illuminate\Http\JsonResponse - */ - public function update(Requests\ItemsRequest $request, Item $item) - { - $item = $item->updateItem($request); - - return response()->json([ - 'item' => $item, - ]); - } - - /** - * Delete a list of existing Items. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function delete(DeleteItemsRequest $request) - { - Item::destroy($request->ids); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Item/UnitsController.php b/app/Http/Controllers/V1/Item/UnitsController.php deleted file mode 100644 index 115eee791..000000000 --- a/app/Http/Controllers/V1/Item/UnitsController.php +++ /dev/null @@ -1,109 +0,0 @@ -has('limit') ? $request->limit : 5; - - $units = Unit::whereCompany($request->header('company')) - ->applyFilters($request->only([ - 'unit_id', - ])) - ->latest() - ->paginateData($limit); - - return response()->json([ - 'units' => $units, - ]); - } - - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() - { - // - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(UnitRequest $request) - { - $data = $request->validated(); - $data['company_id'] = $request->header('company'); - $unit = Unit::create($data); - - return response()->json([ - 'unit' => $unit, - ]); - } - - /** - * Display the specified resource. - * - * @param \Crater\Models\Unit $unit - * @return \Illuminate\Http\Response - */ - public function show(Unit $unit) - { - return response()->json([ - 'unit' => $unit, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param \Crater\Models\Unit $unit - * @return \Illuminate\Http\Response - */ - public function update(UnitRequest $request, Unit $unit) - { - $unit->update($request->validated()); - - return response()->json([ - 'unit' => $unit, - ]); - } - - /** - * Remove the specified resource from storage. - * - * @param \Crater\Models\Unit $unit - * @return \Illuminate\Http\Response - */ - public function destroy(Unit $unit) - { - if ($unit->items()->exists()) { - return response()->json([ - 'error' => 'items_attached', - ]); - } - - $unit->delete(); - - return response()->json([ - 'success' => 'Unit deleted successfully', - ]); - } -} diff --git a/app/Http/Controllers/V1/Mobile/Customer/EstimatePdfController.php b/app/Http/Controllers/V1/Mobile/Customer/EstimatePdfController.php deleted file mode 100644 index b85aa3881..000000000 --- a/app/Http/Controllers/V1/Mobile/Customer/EstimatePdfController.php +++ /dev/null @@ -1,43 +0,0 @@ -status == Estimate::STATUS_SENT || $estimate->status == Estimate::STATUS_DRAFT)) { - $estimate->status = Estimate::STATUS_VIEWED; - $estimate->save(); - $notifyEstimateViewed = CompanySetting::getSetting( - 'notify_estimate_viewed', - $estimate->company_id - ); - - if ($notifyEstimateViewed == 'YES') { - $data['estimate'] = Estimate::findOrFail($estimate->id)->toArray(); - $data['user'] = User::find($estimate->user_id)->toArray(); - $notificationEmail = CompanySetting::getSetting( - 'notification_email', - $estimate->company_id - ); - - \Mail::to($notificationEmail)->send(new EstimateViewedMail($data)); - } - } - - return $estimate->getGeneratedPDFOrStream('estimate'); - } -} diff --git a/app/Http/Controllers/V1/Mobile/Customer/InvoicePdfController.php b/app/Http/Controllers/V1/Mobile/Customer/InvoicePdfController.php deleted file mode 100644 index 85d1ce3de..000000000 --- a/app/Http/Controllers/V1/Mobile/Customer/InvoicePdfController.php +++ /dev/null @@ -1,44 +0,0 @@ -status == Invoice::STATUS_SENT || $invoice->status == Invoice::STATUS_DRAFT)) { - $invoice->status = Invoice::STATUS_VIEWED; - $invoice->viewed = true; - $invoice->save(); - $notifyInvoiceViewed = CompanySetting::getSetting( - 'notify_invoice_viewed', - $invoice->company_id - ); - - if ($notifyInvoiceViewed == 'YES') { - $data['invoice'] = Invoice::findOrFail($invoice->id)->toArray(); - $data['user'] = User::find($invoice->user_id)->toArray(); - $notificationEmail = CompanySetting::getSetting( - 'notification_email', - $invoice->company_id - ); - - \Mail::to($notificationEmail)->send(new InvoiceViewedMail($data)); - } - } - - return $invoice->getGeneratedPDFOrStream('invoice'); - } -} diff --git a/app/Http/Controllers/V1/Onboarding/LoginController.php b/app/Http/Controllers/V1/Onboarding/LoginController.php deleted file mode 100644 index c724798d6..000000000 --- a/app/Http/Controllers/V1/Onboarding/LoginController.php +++ /dev/null @@ -1,25 +0,0 @@ -first(); - Auth::login($user); - - return response()->json(['success' => true]); - } -} diff --git a/app/Http/Controllers/V1/Onboarding/PermissionsController.php b/app/Http/Controllers/V1/Onboarding/PermissionsController.php deleted file mode 100755 index c84f80c3c..000000000 --- a/app/Http/Controllers/V1/Onboarding/PermissionsController.php +++ /dev/null @@ -1,39 +0,0 @@ -permissions = $checker; - } - - /** - * Display the permissions check page. - * - * @return JsonResponse - */ - public function permissions() - { - $permissions = $this->permissions->check( - config('installer.permissions') - ); - - return response()->json([ - 'permissions' => $permissions, - ]); - } -} diff --git a/app/Http/Controllers/V1/PDF/DownloadInvoicePdfController.php b/app/Http/Controllers/V1/PDF/DownloadInvoicePdfController.php new file mode 100644 index 000000000..fdd26ce9d --- /dev/null +++ b/app/Http/Controllers/V1/PDF/DownloadInvoicePdfController.php @@ -0,0 +1,22 @@ +id.'.pdf'); + + return response()->download($path); + } +} diff --git a/app/Http/Controllers/V1/PDF/DownloadPaymentPdfController.php b/app/Http/Controllers/V1/PDF/DownloadPaymentPdfController.php new file mode 100644 index 000000000..6e9c089e4 --- /dev/null +++ b/app/Http/Controllers/V1/PDF/DownloadPaymentPdfController.php @@ -0,0 +1,22 @@ +id.'.pdf'); + + return response()->download($path); + } +} diff --git a/app/Http/Controllers/V1/Expense/DownloadReceiptController.php b/app/Http/Controllers/V1/PDF/DownloadReceiptController.php similarity index 95% rename from app/Http/Controllers/V1/Expense/DownloadReceiptController.php rename to app/Http/Controllers/V1/PDF/DownloadReceiptController.php index 0b56de4a4..b53c7f23e 100644 --- a/app/Http/Controllers/V1/Expense/DownloadReceiptController.php +++ b/app/Http/Controllers/V1/PDF/DownloadReceiptController.php @@ -1,6 +1,6 @@ getGeneratedPDFOrStream('estimate'); + } +} diff --git a/app/Http/Controllers/V1/PDF/InvoicePdfController.php b/app/Http/Controllers/V1/PDF/InvoicePdfController.php new file mode 100644 index 000000000..07a78f45a --- /dev/null +++ b/app/Http/Controllers/V1/PDF/InvoicePdfController.php @@ -0,0 +1,20 @@ +getGeneratedPDFOrStream('invoice'); + } +} diff --git a/app/Http/Controllers/V1/Payment/PaymentPdfController.php b/app/Http/Controllers/V1/PDF/PaymentPdfController.php similarity index 89% rename from app/Http/Controllers/V1/Payment/PaymentPdfController.php rename to app/Http/Controllers/V1/PDF/PaymentPdfController.php index e24f22650..c091e7243 100644 --- a/app/Http/Controllers/V1/Payment/PaymentPdfController.php +++ b/app/Http/Controllers/V1/PDF/PaymentPdfController.php @@ -1,6 +1,6 @@ has('limit') ? $request->limit : 5; - - $paymentMethods = PaymentMethod::whereCompany($request->header('company')) - ->applyFilters($request->only([ - 'method_id', - 'search', - ])) - ->latest() - ->paginateData($limit); - - return response()->json([ - 'paymentMethods' => $paymentMethods, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(PaymentMethodRequest $request) - { - $paymentMethod = PaymentMethod::createPaymentMethod($request); - - return response()->json([ - 'paymentMethod' => $paymentMethod, - ]); - } - - /** - * Display the specified resource. - * - * @param \Crater\Models\PaymentMethod $paymentMethod - * @return \Illuminate\Http\Response - */ - public function show(PaymentMethod $paymentMethod) - { - return response()->json([ - 'paymentMethod' => $paymentMethod, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param \Crater\Models\PaymentMethod $paymentMethod - * @return \Illuminate\Http\Response - */ - public function update(PaymentMethodRequest $request, PaymentMethod $paymentMethod) - { - $paymentMethod->update($request->validated()); - - return response()->json([ - 'paymentMethod' => $paymentMethod, - ]); - } - - /** - * Remove the specified resource from storage. - * - * @param \Crater\Models\PaymentMethod $paymentMethod - * @return \Illuminate\Http\Response - */ - public function destroy(PaymentMethod $paymentMethod) - { - $payments = $paymentMethod->payments; - - if ($payments->count() > 0) { - return response()->json([ - 'error' => 'payments_attached', - ]); - } - - $paymentMethod->delete(); - - return response()->json([ - 'success' => 'Payment method deleted successfully', - ]); - } -} diff --git a/app/Http/Controllers/V1/Payment/PaymentsController.php b/app/Http/Controllers/V1/Payment/PaymentsController.php deleted file mode 100644 index 1c5ee3272..000000000 --- a/app/Http/Controllers/V1/Payment/PaymentsController.php +++ /dev/null @@ -1,96 +0,0 @@ -has('limit') ? $request->limit : 10; - - $payments = Payment::with(['user', 'invoice', 'paymentMethod', 'creator']) - ->join('users', 'users.id', '=', 'payments.user_id') - ->leftJoin('invoices', 'invoices.id', '=', 'payments.invoice_id') - ->leftJoin('payment_methods', 'payment_methods.id', '=', 'payments.payment_method_id') - ->applyFilters($request->only([ - 'search', - 'payment_number', - 'payment_id', - 'payment_method_id', - 'customer_id', - 'orderByField', - 'orderBy', - ])) - ->whereCompany($request->header('company')) - ->select('payments.*', 'users.name', 'invoices.invoice_number', 'payment_methods.name as payment_mode') - ->latest() - ->paginateData($limit); - - return response()->json([ - 'payments' => $payments, - 'paymentTotalCount' => Payment::count(), - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(PaymentRequest $request) - { - $payment = Payment::createPayment($request); - - return response()->json([ - 'payment' => $payment, - 'success' => true, - ]); - } - - public function show(Request $request, Payment $payment) - { - $payment->load([ - 'user', - 'invoice', - 'paymentMethod', - 'fields.customField', - ]); - - return response()->json([ - 'nextPaymentNumber' => $payment->getPaymentNumAttribute(), - 'payment_prefix' => $payment->getPaymentPrefixAttribute(), - 'payment' => $payment, - ]); - } - - public function update(PaymentRequest $request, Payment $payment) - { - $payment = $payment->updatePayment($request); - - return response()->json([ - 'payment' => $payment, - 'success' => true, - ]); - } - - public function delete(DeletePaymentsRequest $request) - { - Payment::deletePayments($request->ids); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Settings/CompanyController.php b/app/Http/Controllers/V1/Settings/CompanyController.php deleted file mode 100644 index 3591d1550..000000000 --- a/app/Http/Controllers/V1/Settings/CompanyController.php +++ /dev/null @@ -1,127 +0,0 @@ -load([ - 'addresses', - 'addresses.country', - 'company', - 'company.address', - 'company.address.country', - ]); - - return response()->json([ - 'user' => $user, - ]); - } - - /** - * Update the Admin profile. - * Includes name, email and (or) password - * - * @param \Crater\Http\Requests\ProfileRequest $request - * @return \Illuminate\Http\JsonResponse - */ - public function updateProfile(ProfileRequest $request) - { - $user = Auth::user(); - - $user->update($request->validated()); - - return response()->json([ - 'user' => $user, - 'success' => true, - ]); - } - - /** - * Update Admin Company Details - * @param \Crater\Http\Requests\CompanyRequest $request - * @return \Illuminate\Http\JsonResponse - */ - public function updateCompany(CompanyRequest $request) - { - $company = Auth::user()->company; - - $company->update($request->only('name')); - - $company->address()->updateOrCreate(['company_id' => $company->id], $request->except(['name'])); - - return response()->json([ - 'company' => $company, - 'success' => true, - ]); - } - - /** - * Upload the company logo to storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function uploadCompanyLogo(Request $request) - { - $data = json_decode($request->company_logo); - - if ($data) { - $company = Company::find($request->header('company')); - - if ($company) { - $company->clearMediaCollection('logo'); - - $company->addMediaFromBase64($data->data) - ->usingFileName($data->name) - ->toMediaCollection('logo'); - } - } - - return response()->json([ - 'success' => true, - ]); - } - - /** - * Upload the Admin Avatar to public storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function uploadAvatar(Request $request) - { - $data = json_decode($request->admin_avatar); - - if ($data) { - $user = auth()->user(); - - if ($user) { - $user->clearMediaCollection('admin_avatar'); - - $user->addMediaFromBase64($data->data) - ->usingFileName($data->name) - ->toMediaCollection('admin_avatar'); - } - } - - return response()->json([ - 'user' => $user, - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Settings/TaxTypesController.php b/app/Http/Controllers/V1/Settings/TaxTypesController.php deleted file mode 100644 index 3f3c10531..000000000 --- a/app/Http/Controllers/V1/Settings/TaxTypesController.php +++ /dev/null @@ -1,103 +0,0 @@ -has('limit') ? $request->limit : 5; - - $taxTypes = TaxType::whereCompany($request->header('company')) - ->applyFilters($request->only([ - 'tax_type_id', - 'search', - 'orderByField', - 'orderBy', - ])) - ->latest() - ->paginateData($limit); - - return response()->json([ - 'taxTypes' => $taxTypes, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(TaxTypeRequest $request) - { - $data = $request->validated(); - - $data['company_id'] = $request->header('company'); - - $taxType = TaxType::create($data); - - return response()->json([ - 'taxType' => $taxType, - ]); - } - - /** - * Display the specified resource. - * - * @param \Crater\Models\TaxType $taxType - * @return \Illuminate\Http\Response - */ - public function show(TaxType $taxType) - { - return response()->json([ - 'taxType' => $taxType, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param \Crater\Models\TaxType $taxType - * @return \Illuminate\Http\Response - */ - public function update(TaxTypeRequest $request, TaxType $taxType) - { - $taxType->update($request->validated()); - - return response()->json([ - 'taxType' => $taxType, - ]); - } - - /** - * Remove the specified resource from storage. - * - * @param \Crater\Models\TaxType $taxType - * @return \Illuminate\Http\Response - */ - public function destroy(TaxType $taxType) - { - if ($taxType->taxes() && $taxType->taxes()->count() > 0) { - return response()->json([ - 'success' => false, - ]); - } - $taxType->delete(); - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Update/CheckVersionController.php b/app/Http/Controllers/V1/Update/CheckVersionController.php deleted file mode 100644 index bcc4103f5..000000000 --- a/app/Http/Controllers/V1/Update/CheckVersionController.php +++ /dev/null @@ -1,26 +0,0 @@ -json($json); - } -} diff --git a/app/Http/Controllers/V1/Update/CopyFilesController.php b/app/Http/Controllers/V1/Update/CopyFilesController.php deleted file mode 100644 index 38a0e9a51..000000000 --- a/app/Http/Controllers/V1/Update/CopyFilesController.php +++ /dev/null @@ -1,30 +0,0 @@ -validate([ - 'path' => 'required', - ]); - - $path = Updater::copyFiles($request->path); - - return response()->json([ - 'success' => true, - 'path' => $path, - ]); - } -} diff --git a/app/Http/Controllers/V1/Update/DeleteFilesController.php b/app/Http/Controllers/V1/Update/DeleteFilesController.php deleted file mode 100644 index 8ec782431..000000000 --- a/app/Http/Controllers/V1/Update/DeleteFilesController.php +++ /dev/null @@ -1,27 +0,0 @@ -deleted_files) && ! empty($request->deleted_files)) { - Updater::deleteFiles($request->deleted_files); - } - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Update/DownloadUpdateController.php b/app/Http/Controllers/V1/Update/DownloadUpdateController.php deleted file mode 100644 index 6b853eaae..000000000 --- a/app/Http/Controllers/V1/Update/DownloadUpdateController.php +++ /dev/null @@ -1,30 +0,0 @@ -validate([ - 'version' => 'required', - ]); - - $path = Updater::download($request->version); - - return response()->json([ - 'success' => true, - 'path' => $path, - ]); - } -} diff --git a/app/Http/Controllers/V1/Update/FinishUpdateController.php b/app/Http/Controllers/V1/Update/FinishUpdateController.php deleted file mode 100644 index 6c5b13d96..000000000 --- a/app/Http/Controllers/V1/Update/FinishUpdateController.php +++ /dev/null @@ -1,28 +0,0 @@ -validate([ - 'installed' => 'required', - 'version' => 'required', - ]); - - $json = Updater::finishUpdate($request->installed, $request->version); - - return response()->json($json); - } -} diff --git a/app/Http/Controllers/V1/Update/MigrateUpdateController.php b/app/Http/Controllers/V1/Update/MigrateUpdateController.php deleted file mode 100644 index c1abe512a..000000000 --- a/app/Http/Controllers/V1/Update/MigrateUpdateController.php +++ /dev/null @@ -1,25 +0,0 @@ -json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Controllers/V1/Update/UnzipUpdateController.php b/app/Http/Controllers/V1/Update/UnzipUpdateController.php deleted file mode 100644 index bdfa466ab..000000000 --- a/app/Http/Controllers/V1/Update/UnzipUpdateController.php +++ /dev/null @@ -1,37 +0,0 @@ -validate([ - 'path' => 'required', - ]); - - try { - $path = Updater::unzip($request->path); - - return response()->json([ - 'success' => true, - 'path' => $path, - ]); - } catch (\Exception $e) { - return response()->json([ - 'success' => false, - 'error' => $e->getMessage(), - ], 500); - } - } -} diff --git a/app/Http/Controllers/V1/Users/UsersController.php b/app/Http/Controllers/V1/Users/UsersController.php deleted file mode 100644 index e05ef914c..000000000 --- a/app/Http/Controllers/V1/Users/UsersController.php +++ /dev/null @@ -1,113 +0,0 @@ -has('limit') ? $request->limit : 10; - - $users = User::where('role', 'admin', 'creator') - ->applyFilters( - $request->only([ - 'phone', - 'email', - 'display_name', - 'orderByField', - 'orderBy', - ]) - ) - ->latest() - ->paginate($limit); - - return response()->json([ - 'users' => $users, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\UserRequest $request - * @return \Illuminate\Http\JsonResponse - */ - public function store(UserRequest $request) - { - $data = $request->validated(); - $data['role'] = 'admin'; - $data['company_id'] = Auth::user()->company_id; - $data['creator_id'] = Auth::id(); - $user = User::create($data); - - $user->setSettings([ - 'language' => CompanySetting::getSetting('language', $user->company_id), - ]); - - return response()->json([ - 'user' => $user, - 'success' => true, - ]); - } - - /** - * Display the specified resource. - * - * @param \Crater\Models\User $user - * @return \Illuminate\Http\JsonResponse - */ - public function show(User $user) - { - return response()->json([ - 'user' => $user, - 'success' => true, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\UserRequest $request - * @param \Crater\Models\User $user - * @return \Illuminate\Http\JsonResponse - */ - public function update(UserRequest $request, User $user) - { - $user->update($request->validated()); - - return response()->json([ - 'user' => $user, - 'success' => true, - ]); - } - - /** - * Display a listing of the resource. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\JsonResponse - */ - public function delete(Request $request) - { - if ($request->users) { - User::destroy($request->users); - } - - return response()->json([ - 'success' => true, - ]); - } -} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index f725282dc..36f04843c 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -2,7 +2,6 @@ namespace Crater\Http; -use Crater\Http\Middleware\AdminMiddleware; use Illuminate\Foundation\Http\Kernel as HttpKernel; use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful; @@ -57,16 +56,19 @@ class Kernel extends HttpKernel */ protected $routeMiddleware = [ 'auth' => \Crater\Http\Middleware\Authenticate::class, + 'bouncer' => \Crater\Http\Middleware\ScopeBouncer::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \Crater\Http\Middleware\RedirectIfAuthenticated::class, + 'customer' => \Crater\Http\Middleware\CustomerRedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'admin' => AdminMiddleware::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'install' => \Crater\Http\Middleware\InstallationMiddleware::class, 'redirect-if-installed' => \Crater\Http\Middleware\RedirectIfInstalled::class, 'redirect-if-unauthenticated' => \Crater\Http\Middleware\RedirectIfUnauthorized::class, + 'customer-guest' => \Crater\Http\Middleware\CustomerGuest::class, + 'company' => \Crater\Http\Middleware\CompanyMiddleware::class, ]; /** diff --git a/app/Http/Middleware/CompanyMiddleware.php b/app/Http/Middleware/CompanyMiddleware.php new file mode 100644 index 000000000..dd37ecac0 --- /dev/null +++ b/app/Http/Middleware/CompanyMiddleware.php @@ -0,0 +1,30 @@ +user(); + + if ((! $request->header('company')) || (! $user->hasCompany($request->header('company')))) { + $request->headers->set('company', $user->companies()->first()->id); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/InstallationMiddleware.php b/app/Http/Middleware/InstallationMiddleware.php index 6c89b6d95..22f42ccad 100644 --- a/app/Http/Middleware/InstallationMiddleware.php +++ b/app/Http/Middleware/InstallationMiddleware.php @@ -17,12 +17,12 @@ class InstallationMiddleware public function handle($request, Closure $next) { if (! \Storage::disk('local')->has('database_created')) { - return redirect('/on-boarding'); + return redirect('/installation'); } if (\Storage::disk('local')->has('database_created')) { if (Setting::getSetting('profile_complete') !== 'COMPLETED') { - return redirect('/on-boarding'); + return redirect('/installation'); } } diff --git a/app/Http/Middleware/ScopeBouncer.php b/app/Http/Middleware/ScopeBouncer.php new file mode 100644 index 000000000..6d3f4d93a --- /dev/null +++ b/app/Http/Middleware/ScopeBouncer.php @@ -0,0 +1,45 @@ +bouncer = $bouncer; + } + + /** + * Set the proper Bouncer scope for the incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @return mixed + */ + public function handle($request, Closure $next) + { + $user = $request->user(); + $tenantId = $request->header('company') + ? $request->header('company') + : $user->companies()->first()->id; + + $this->bouncer->scope()->to($tenantId); + + return $next($request); + } +} diff --git a/app/Http/Requests/BulkExchangeRateRequest.php b/app/Http/Requests/BulkExchangeRateRequest.php new file mode 100644 index 000000000..3e52344ba --- /dev/null +++ b/app/Http/Requests/BulkExchangeRateRequest.php @@ -0,0 +1,39 @@ + [ + 'required' + ], + 'currencies.*.id' => [ + 'required', + 'numeric' + ], + 'currencies.*.exchange_rate' => [ + 'required' + ] + ]; + } +} diff --git a/app/Http/Requests/CompaniesRequest.php b/app/Http/Requests/CompaniesRequest.php new file mode 100644 index 000000000..0959349f9 --- /dev/null +++ b/app/Http/Requests/CompaniesRequest.php @@ -0,0 +1,77 @@ + [ + 'required', + Rule::unique('companies'), + 'string' + ], + 'currency' => [ + 'required' + ], + 'address.name' => [ + 'nullable', + ], + 'address.address_street_1' => [ + 'nullable', + ], + 'address.address_street_2' => [ + 'nullable', + ], + 'address.city' => [ + 'nullable', + ], + 'address.state' => [ + 'nullable', + ], + 'address.country_id' => [ + 'required', + ], + 'address.zip' => [ + 'nullable', + ], + 'address.phone' => [ + 'nullable', + ], + 'address.fax' => [ + 'nullable', + ], + ]; + } + + public function getCompanyPayload() + { + return collect($this->validated()) + ->only([ + 'name' + ]) + ->merge([ + 'owner_id' => $this->user()->id + ]) + ->toArray(); + } +} diff --git a/app/Http/Requests/CompanyRequest.php b/app/Http/Requests/CompanyRequest.php index 017616be2..234f13c85 100644 --- a/app/Http/Requests/CompanyRequest.php +++ b/app/Http/Requests/CompanyRequest.php @@ -3,6 +3,7 @@ namespace Crater\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class CompanyRequest extends FormRequest { @@ -26,8 +27,9 @@ public function rules() return [ 'name' => [ 'required', + Rule::unique('companies')->ignore($this->header('company'), 'id'), ], - 'country_id' => [ + 'address.country_id' => [ 'required', ], ]; diff --git a/app/Http/Requests/CustomerRequest.php b/app/Http/Requests/CustomerRequest.php index ed0fa389c..156cdaf30 100644 --- a/app/Http/Requests/CustomerRequest.php +++ b/app/Http/Requests/CustomerRequest.php @@ -2,7 +2,10 @@ namespace Crater\Http\Requests; +use Crater\Models\Address; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Arr; +use Illuminate\Support\Facades\Auth; use Illuminate\Validation\Rule; class CustomerRequest extends FormRequest @@ -28,29 +31,151 @@ public function rules() 'name' => [ 'required', ], - 'addresses.*.address_street_1' => [ - 'max:255', - ], - 'addresses.*.address_street_2' => [ - 'max:255', - ], 'email' => [ 'email', 'nullable', - 'unique:users,email', + Rule::unique('customers')->where('company_id', $this->header('company')) + ], + 'password' => [ + 'nullable', + ], + 'phone' => [ + 'nullable', + ], + 'company_name' => [ + 'nullable', + ], + 'contact_name' => [ + 'nullable', + ], + 'website' => [ + 'nullable', + ], + 'prefix' => [ + 'nullable', + ], + 'enable_portal' => [ + 'nullable', + ], + 'currency_id' => [ + 'nullable', ], + 'billing.name' => [ + 'nullable', + ], + 'billing.address_street_1' => [ + 'nullable', + ], + 'billing.address_street_2' => [ + 'nullable', + ], + 'billing.city' => [ + 'nullable', + ], + 'billing.state' => [ + 'nullable', + ], + 'billing.country_id' => [ + 'nullable', + ], + 'billing.zip' => [ + 'nullable', + ], + 'billing.phone' => [ + 'nullable', + ], + 'billing.fax' => [ + 'nullable', + ], + 'shipping.name' => [ + 'nullable', + ], + 'shipping.address_street_1' => [ + 'nullable', + ], + 'shipping.address_street_2' => [ + 'nullable', + ], + 'shipping.city' => [ + 'nullable', + ], + 'shipping.state' => [ + 'nullable', + ], + 'shipping.country_id' => [ + 'nullable', + ], + 'shipping.zip' => [ + 'nullable', + ], + 'shipping.phone' => [ + 'nullable', + ], + 'shipping.fax' => [ + 'nullable', + ] ]; if ($this->isMethod('PUT') && $this->email != null) { - $rules = [ - 'email' => [ - 'email', - 'nullable', - Rule::unique('users')->ignore($this->route('customer')->id), - ], + $rules['email'] = [ + 'email', + 'nullable', + Rule::unique('customers')->ignore($this->route('customer')->id), ]; }; return $rules; } + + public function getCustomerPayload() + { + return collect($this->validated()) + ->only([ + 'name', + 'email', + 'currency_id', + 'password', + 'phone', + 'prefix', + 'company_name', + 'contact_name', + 'website', + 'enable_portal', + 'estimate_prefix', + 'payment_prefix', + 'invoice_prefix', + ]) + ->merge([ + 'creator_id' => $this->user()->id, + 'company_id' => $this->header('company'), + ]) + ->toArray(); + } + + public function getShippingAddress() + { + return collect($this->shipping) + ->merge([ + 'type' => Address::SHIPPING_TYPE + ]) + ->toArray(); + } + + public function getBillingAddress() + { + return collect($this->billing) + ->merge([ + 'type' => Address::BILLING_TYPE + ]) + ->toArray(); + } + + public function hasAddress(array $address) + { + $data = Arr::where($address, function ($value, $key) { + return isset($value); + }); + + return $data; + } } diff --git a/app/Http/Requests/DatabaseEnvironmentRequest.php b/app/Http/Requests/DatabaseEnvironmentRequest.php index ba49abd7e..5bfae113b 100644 --- a/app/Http/Requests/DatabaseEnvironmentRequest.php +++ b/app/Http/Requests/DatabaseEnvironmentRequest.php @@ -25,7 +25,7 @@ public function rules() { switch ($this->get('database_connection')) { case 'sqlite': - return [ + return [ 'app_url' => [ 'required', 'url', @@ -42,7 +42,7 @@ public function rules() break; default: - return [ + return [ 'app_url' => [ 'required', 'url', diff --git a/app/Http/Requests/DeleteCustomersRequest.php b/app/Http/Requests/DeleteCustomersRequest.php index 551732d02..5e3c4cae8 100644 --- a/app/Http/Requests/DeleteCustomersRequest.php +++ b/app/Http/Requests/DeleteCustomersRequest.php @@ -30,7 +30,7 @@ public function rules() ], 'ids.*' => [ 'required', - Rule::exists('users', 'id'), + Rule::exists('customers', 'id'), ], ]; } diff --git a/app/Http/Requests/DeleteUserRequest.php b/app/Http/Requests/DeleteUserRequest.php new file mode 100644 index 000000000..5c6cf3d03 --- /dev/null +++ b/app/Http/Requests/DeleteUserRequest.php @@ -0,0 +1,37 @@ + [ + 'required', + ], + 'users.*' => [ + 'required', + Rule::exists('users', 'id'), + ], + ]; + } +} diff --git a/app/Http/Requests/EstimatesRequest.php b/app/Http/Requests/EstimatesRequest.php index f0d4c08c3..00ba6eb06 100644 --- a/app/Http/Requests/EstimatesRequest.php +++ b/app/Http/Requests/EstimatesRequest.php @@ -2,9 +2,11 @@ namespace Crater\Http\Requests; +use Crater\Models\CompanySetting; +use Crater\Models\Customer; use Crater\Models\Estimate; -use Crater\Rules\UniqueNumber; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class EstimatesRequest extends FormRequest { @@ -30,14 +32,17 @@ public function rules() 'required', ], 'expiry_date' => [ - 'required', + 'nullable', ], - 'user_id' => [ + 'customer_id' => [ 'required', ], 'estimate_number' => [ 'required', - new UniqueNumber(Estimate::class), + Rule::unique('estimates')->where('company_id', $this->header('company')) + ], + 'exchange_rate' => [ + 'nullable' ], 'discount' => [ 'required', @@ -62,7 +67,7 @@ public function rules() 'array', ], 'items.*.description' => [ - 'max:255', + 'nullable', ], 'items.*' => [ 'required', @@ -79,13 +84,49 @@ public function rules() ], ]; + $companyCurrency = CompanySetting::getSetting('currency', $this->header('company')); + + $customerCurrency = Customer::find($this->customer_id)->currency_id; + + if ((string)$customerCurrency !== $companyCurrency) { + $rules['exchange_rate'] = [ + 'required', + ]; + }; + if ($this->isMethod('PUT')) { $rules['estimate_number'] = [ 'required', - new UniqueNumber(Estimate::class, $this->route('estimate')->id), + Rule::unique('estimates') + ->ignore($this->route('estimate')->id) + ->where('company_id', $this->header('company')), ]; } return $rules; } + + public function getEstimatePayload() + { + $company_currency = CompanySetting::getSetting('currency', $this->header('company')); + $current_currency = $this->currency_id; + $exchange_rate = $company_currency != $current_currency ? $this->exchange_rate : 1; + $currency = Customer::find($this->customer_id)->currency_id; + + return collect($this->except('items', 'taxes')) + ->merge([ + 'creator_id' => $this->user()->id, + 'status' => $this->has('estimateSend') ? Estimate::STATUS_SENT : Estimate::STATUS_DRAFT, + 'company_id' => $this->header('company'), + 'tax_per_item' => CompanySetting::getSetting('tax_per_item', $this->header('company')) ?? 'NO ', + 'discount_per_item' => CompanySetting::getSetting('discount_per_item', $this->header('company')) ?? 'NO', + 'exchange_rate' => $exchange_rate, + 'base_discount_val' => $this->discount_val * $exchange_rate, + 'base_sub_total' => $this->sub_total * $exchange_rate, + 'base_total' => $this->total * $exchange_rate, + 'base_tax' => $this->tax * $exchange_rate, + 'currency_id' => $currency, + ]) + ->toArray(); + } } diff --git a/app/Http/Requests/ExchangeRateLogRequest.php b/app/Http/Requests/ExchangeRateLogRequest.php new file mode 100644 index 000000000..5f7050414 --- /dev/null +++ b/app/Http/Requests/ExchangeRateLogRequest.php @@ -0,0 +1,53 @@ + [ + 'required', + ], + 'currency_id' => [ + 'required' + ] + ]; + } + + public function getExchangeRateLogPayload() + { + $companyCurrency = CompanySetting::getSetting( + 'currency', + $this->header('company') + ); + + if ($this->currency_id !== $companyCurrency) { + return collect($this->validated()) + ->merge([ + 'company_id' => $this->header('company'), + 'base_currency_id' => $companyCurrency, + ]) + ->toArray(); + } + } +} diff --git a/app/Http/Requests/ExchangeRateProviderRequest.php b/app/Http/Requests/ExchangeRateProviderRequest.php new file mode 100644 index 000000000..773ca864c --- /dev/null +++ b/app/Http/Requests/ExchangeRateProviderRequest.php @@ -0,0 +1,59 @@ + [ + 'required' + ], + 'key' => [ + 'required', + ], + 'currencies' => [ + 'nullable', + ], + 'currencies.*' => [ + 'nullable', + ], + 'driver_config' => [ + 'nullable' + ], + 'active' => [ + 'nullable', + 'boolean' + ], + ]; + + return $rules; + } + + public function getExchangeRateProviderPayload() + { + return collect($this->validated()) + ->merge([ + 'company_id' => $this->header('company') + ]) + ->toArray(); + } +} diff --git a/app/Http/Requests/ExpenseCategoryRequest.php b/app/Http/Requests/ExpenseCategoryRequest.php index c8a5e3a16..6ba30885d 100644 --- a/app/Http/Requests/ExpenseCategoryRequest.php +++ b/app/Http/Requests/ExpenseCategoryRequest.php @@ -32,4 +32,13 @@ public function rules() ], ]; } + + public function getExpenseCategoryPayload() + { + return collect($this->validated()) + ->merge([ + 'company_id' => $this->header('company') + ]) + ->toArray(); + } } diff --git a/app/Http/Requests/ExpenseRequest.php b/app/Http/Requests/ExpenseRequest.php index e2939f66f..1cf16f448 100644 --- a/app/Http/Requests/ExpenseRequest.php +++ b/app/Http/Requests/ExpenseRequest.php @@ -2,6 +2,7 @@ namespace Crater\Http\Requests; +use Crater\Models\CompanySetting; use Illuminate\Foundation\Http\FormRequest; class ExpenseRequest extends FormRequest @@ -23,22 +24,58 @@ public function authorize() */ public function rules() { - return [ + $companyCurrency = CompanySetting::getSetting('currency', $this->header('company')); + + $rules = [ 'expense_date' => [ 'required', ], 'expense_category_id' => [ 'required', ], + 'exchange_rate' => [ + 'nullable' + ], + 'payment_method_id' => [ + 'nullable', + ], 'amount' => [ 'required', ], - 'user_id' => [ + 'customer_id' => [ 'nullable', ], 'notes' => [ 'nullable', ], + 'currency_id' => [ + 'required' + ], ]; + + if ($companyCurrency !== $this->currency_id) { + $rules['exchange_rate'] = [ + 'required', + ]; + }; + + return $rules; + } + + public function getExpensePayload() + { + $company_currency = CompanySetting::getSetting('currency', $this->header('company')); + $current_currency = $this->currency_id; + $exchange_rate = $company_currency != $current_currency ? $this->exchange_rate : 1; + + return collect($this->validated()) + ->merge([ + 'creator_id' => $this->user()->id, + 'company_id' => $this->header('company'), + 'exchange_rate' => $exchange_rate, + 'base_amount' => $this->amount * $exchange_rate, + 'currency_id' => $current_currency + ]) + ->toArray(); } } diff --git a/app/Http/Requests/InvoicesRequest.php b/app/Http/Requests/InvoicesRequest.php index e32fe9acc..3b60ad5d5 100644 --- a/app/Http/Requests/InvoicesRequest.php +++ b/app/Http/Requests/InvoicesRequest.php @@ -2,9 +2,11 @@ namespace Crater\Http\Requests; +use Crater\Models\CompanySetting; +use Crater\Models\Customer; use Crater\Models\Invoice; -use Crater\Rules\UniqueNumber; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class InvoicesRequest extends FormRequest { @@ -30,14 +32,17 @@ public function rules() 'required', ], 'due_date' => [ - 'required', + 'nullable', ], - 'user_id' => [ + 'customer_id' => [ 'required', ], 'invoice_number' => [ 'required', - new UniqueNumber(Invoice::class), + Rule::unique('invoices')->where('company_id', $this->header('company')) + ], + 'exchange_rate' => [ + 'nullable' ], 'discount' => [ 'required', @@ -66,7 +71,7 @@ public function rules() 'max:255', ], 'items.*.description' => [ - 'max:255', + 'nullable', ], 'items.*.name' => [ 'required', @@ -79,13 +84,52 @@ public function rules() ], ]; + $companyCurrency = CompanySetting::getSetting('currency', $this->header('company')); + + $customerCurrency = Customer::find($this->customer_id)->currency_id; + + if ((string)$customerCurrency !== $companyCurrency) { + $rules['exchange_rate'] = [ + 'required', + ]; + }; + if ($this->isMethod('PUT')) { $rules['invoice_number'] = [ 'required', - new UniqueNumber(Invoice::class, $this->route('invoice')->id), + Rule::unique('invoices') + ->ignore($this->route('invoice')->id) + ->where('company_id', $this->header('company')), ]; } return $rules; } + + public function getInvoicePayload() + { + $company_currency = CompanySetting::getSetting('currency', $this->header('company')); + $current_currency = $this->currency_id; + $exchange_rate = $company_currency != $current_currency ? $this->exchange_rate : 1; + $currency = Customer::find($this->customer_id)->currency_id; + + return collect($this->except('items', 'taxes')) + ->merge([ + 'creator_id' => $this->user()->id, + 'status' => $this->has('invoiceSend') ? Invoice::STATUS_SENT : Invoice::STATUS_DRAFT, + 'paid_status' => Invoice::STATUS_UNPAID, + 'company_id' => $this->header('company'), + 'tax_per_item' => CompanySetting::getSetting('tax_per_item', $this->header('company')) ?? 'NO ', + 'discount_per_item' => CompanySetting::getSetting('discount_per_item', $this->header('company')) ?? 'NO', + 'due_amount' => $this->total, + 'exchange_rate' => $exchange_rate, + 'base_total' => $this->total * $exchange_rate, + 'base_discount_val' => $this->discount_val * $exchange_rate, + 'base_sub_total' => $this->sub_total * $exchange_rate, + 'base_tax' => $this->tax * $exchange_rate, + 'base_due_amount' => $this->total * $exchange_rate, + 'currency_id' => $currency, + ]) + ->toArray(); + } } diff --git a/app/Http/Requests/LoginRequest.php b/app/Http/Requests/LoginRequest.php new file mode 100644 index 000000000..3d363c817 --- /dev/null +++ b/app/Http/Requests/LoginRequest.php @@ -0,0 +1,38 @@ + [ + 'required', + ], + 'password' => [ + 'required', + ], + 'device_name' => [ + 'required' + ], + ]; + } +} diff --git a/app/Http/Requests/MailEnvironmentRequest.php b/app/Http/Requests/MailEnvironmentRequest.php index 87ff28694..94ffcc4d6 100644 --- a/app/Http/Requests/MailEnvironmentRequest.php +++ b/app/Http/Requests/MailEnvironmentRequest.php @@ -105,7 +105,7 @@ public function rules() 'string', ], 'mail_encryption' => [ - 'required', + 'nullable', 'string', ], 'from_name' => [ diff --git a/app/Http/Requests/NotesRequest.php b/app/Http/Requests/NotesRequest.php index 8463ff39f..faf0beae2 100644 --- a/app/Http/Requests/NotesRequest.php +++ b/app/Http/Requests/NotesRequest.php @@ -3,6 +3,7 @@ namespace Crater\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class NotesRequest extends FormRequest { @@ -23,10 +24,40 @@ public function authorize() */ public function rules() { - return [ - 'type' => ['required'], - 'name' => ['required'], - 'notes' => ['required'], + $rules = [ + 'type' => [ + 'required' + ], + 'name' => [ + 'required', + Rule::unique('notes') + ->where('company_id', $this->header('company')) + ->where('type', $this->type) + ], + 'notes' => [ + 'required' + ], ]; + + if ($this->isMethod('PUT')) { + $rules['name'] = [ + 'required', + Rule::unique('notes') + ->ignore($this->route('note')->id) + ->where('type', $this->type) + ->where('company_id', $this->header('company')) + ]; + } + + return $rules; + } + + public function getNotesPayload() + { + return collect($this->validated()) + ->merge([ + 'company_id' => $this->header('company') + ]) + ->toArray(); } } diff --git a/app/Http/Requests/PaymentMethodRequest.php b/app/Http/Requests/PaymentMethodRequest.php index 8f3766e04..75984ff87 100644 --- a/app/Http/Requests/PaymentMethodRequest.php +++ b/app/Http/Requests/PaymentMethodRequest.php @@ -27,14 +27,17 @@ public function rules() $data = [ 'name' => [ 'required', - 'unique:payment_methods,name', + Rule::unique('payment_methods') + ->where('company_id', $this->header('company')), ], ]; if ($this->getMethod() == 'PUT') { $data['name'] = [ 'required', - Rule::unique('payment_methods')->ignore($this->route('payment_method'), 'id'), + Rule::unique('payment_methods') + ->ignore($this->route('payment_method'), 'id') + ->where('company_id', $this->header('company')), ]; } diff --git a/app/Http/Requests/PaymentRequest.php b/app/Http/Requests/PaymentRequest.php index 2295ac9eb..92779c6ab 100644 --- a/app/Http/Requests/PaymentRequest.php +++ b/app/Http/Requests/PaymentRequest.php @@ -2,9 +2,10 @@ namespace Crater\Http\Requests; -use Crater\Models\Payment; -use Crater\Rules\UniqueNumber; +use Crater\Models\CompanySetting; +use Crater\Models\Customer; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class PaymentRequest extends FormRequest { @@ -29,15 +30,18 @@ public function rules() 'payment_date' => [ 'required', ], - 'user_id' => [ + 'customer_id' => [ 'required', ], + 'exchange_rate' => [ + 'nullable' + ], 'amount' => [ 'required', ], 'payment_number' => [ 'required', - new UniqueNumber(Payment::class), + Rule::unique('payments')->where('company_id', $this->header('company')) ], 'invoice_id' => [ 'nullable', @@ -53,10 +57,40 @@ public function rules() if ($this->isMethod('PUT')) { $rules['payment_number'] = [ 'required', - new UniqueNumber(Payment::class, $this->route('payment')->id), + Rule::unique('payments') + ->ignore($this->route('payment')->id) + ->where('company_id', $this->header('company')), ]; } + $companyCurrency = CompanySetting::getSetting('currency', $this->header('company')); + + $customerCurrency = Customer::find($this->customer_id)->currency_id; + + if ((string)$customerCurrency !== $companyCurrency) { + $rules['exchange_rate'] = [ + 'required', + ]; + }; + return $rules; } + + public function getPaymentPayload() + { + $company_currency = CompanySetting::getSetting('currency', $this->header('company')); + $current_currency = $this->currency_id; + $exchange_rate = $company_currency != $current_currency ? $this->exchange_rate : 1; + $currency = Customer::find($this->customer_id)->currency_id; + + return collect($this->validated()) + ->merge([ + 'creator_id' => $this->user()->id, + 'company_id' => $this->header('company'), + 'exchange_rate' => $exchange_rate, + 'base_amount' => $this->amount * $exchange_rate, + 'currency_id' => $currency + ]) + ->toArray(); + } } diff --git a/app/Http/Requests/RecurringInvoiceRequest.php b/app/Http/Requests/RecurringInvoiceRequest.php new file mode 100644 index 000000000..d9d2240cb --- /dev/null +++ b/app/Http/Requests/RecurringInvoiceRequest.php @@ -0,0 +1,119 @@ +header('company')); + + $rules = [ + 'starts_at' => [ + 'required' + ], + 'send_automatically' => [ + 'required', + 'boolean' + ], + 'customer_id' => [ + 'required' + ], + 'exchange_rate' => [ + 'nullable' + ], + 'discount' => [ + 'required', + ], + 'discount_val' => [ + 'required', + ], + 'sub_total' => [ + 'required', + ], + 'total' => [ + 'required', + ], + 'tax' => [ + 'required', + ], + 'status' => [ + 'required' + ], + 'exchange_rate' => [ + 'nullable' + ], + 'frequency' => [ + 'required' + ], + 'limit_by' => [ + 'required' + ], + 'limit_count' => [ + 'required_if:limit_by,COUNT', + ], + 'limit_date' => [ + 'required_if:limit_by,DATE', + ], + 'items' => [ + 'required' + ], + 'items.*' => [ + 'required' + ] + ]; + + $customerCurrency = Customer::find($this->customer_id)->currency_id; + + if ((string)$customerCurrency !== $companyCurrency) { + $rules['exchange_rate'] = [ + 'required', + ]; + }; + + return $rules; + } + + public function getRecurringInvoicePayload() + { + $company_currency = CompanySetting::getSetting('currency', $this->header('company')); + $current_currency = $this->currency_id; + $exchange_rate = $company_currency != $current_currency ? $this->exchange_rate : 1; + $currency = Customer::find($this->customer_id)->currency_id; + + $nextInvoiceAt = RecurringInvoice::getNextInvoiceDate($this->frequency, $this->starts_at); + + return collect($this->except('items', 'taxes')) + ->merge([ + 'creator_id' => $this->user()->id, + 'company_id' => $this->header('company'), + 'next_invoice_at' => $nextInvoiceAt, + 'tax_per_item' => CompanySetting::getSetting('tax_per_item', $this->header('company')) ?? 'NO ', + 'discount_per_item' => CompanySetting::getSetting('discount_per_item', $this->header('company')) ?? 'NO', + 'due_amount' => $this->total, + 'exchange_rate' => $exchange_rate, + 'currency_id' => $currency + ]) + ->toArray(); + } +} diff --git a/app/Http/Requests/RoleRequest.php b/app/Http/Requests/RoleRequest.php new file mode 100644 index 000000000..1534c4ab7 --- /dev/null +++ b/app/Http/Requests/RoleRequest.php @@ -0,0 +1,62 @@ + [ + 'required', + 'string', + Rule::unique('roles')->where('scope', $this->header('company')) + ], + 'abilities' => [ + 'required' + ], + 'abilities.*' => [ + 'required' + ] + ]; + + if ($this->getMethod() == 'PUT') { + $rules['name'] = [ + 'required', + 'string', + Rule::unique('roles') + ->ignore($this->route('role')->id, 'id') + ->where('scope', $this->header('company')) + ]; + } + + return $rules; + } + + public function getRolePayload() + { + return collect($this->except('abilities')) + ->merge([ + 'scope' => $this->header('company'), + ]) + ->toArray(); + } +} diff --git a/app/Http/Requests/TaxTypeRequest.php b/app/Http/Requests/TaxTypeRequest.php index 219ccd5e5..4618b8145 100644 --- a/app/Http/Requests/TaxTypeRequest.php +++ b/app/Http/Requests/TaxTypeRequest.php @@ -3,6 +3,7 @@ namespace Crater\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class TaxTypeRequest extends FormRequest { @@ -23,9 +24,11 @@ public function authorize() */ public function rules() { - return [ + $rules = [ 'name' => [ 'required', + Rule::unique('tax_types') + ->where('company_id', $this->header('company')) ], 'percent' => [ 'required', @@ -40,5 +43,25 @@ public function rules() 'nullable', ], ]; + + if ($this->isMethod('PUT')) { + $rules['name'] = [ + 'required', + Rule::unique('tax_types') + ->ignore($this->route('tax_type')->id) + ->where('company_id', $this->header('company')) + ]; + } + + return $rules; + } + + public function getTaxTypePayload() + { + return collect($this->validated()) + ->merge([ + 'company_id' => $this->header('company') + ]) + ->toArray(); } } diff --git a/app/Http/Requests/UnitRequest.php b/app/Http/Requests/UnitRequest.php index 7c64b7d47..c57d6e2e9 100644 --- a/app/Http/Requests/UnitRequest.php +++ b/app/Http/Requests/UnitRequest.php @@ -27,17 +27,29 @@ public function rules() $data = [ 'name' => [ 'required', - 'unique:units,name', + Rule::unique('units') + ->where('company_id', $this->header('company')), ], ]; if ($this->getMethod() == 'PUT') { $data['name'] = [ 'required', - Rule::unique('units')->ignore($this->route('unit'), 'id'), + Rule::unique('units') + ->ignore($this->route('unit'), 'id') + ->where('company_id', $this->header('company')), ]; } return $data; } + + public function getUnitPayload() + { + return collect($this->validated()) + ->merge([ + 'company_id' => $this->header('company') + ]) + ->toArray(); + } } diff --git a/app/Http/Requests/UpdateSettingsRequest.php b/app/Http/Requests/UpdateSettingsRequest.php index 34411ad76..80447e722 100644 --- a/app/Http/Requests/UpdateSettingsRequest.php +++ b/app/Http/Requests/UpdateSettingsRequest.php @@ -27,9 +27,6 @@ public function rules() 'settings' => [ 'required', ], - 'settings.*' => [ - 'required', - ], ]; } } diff --git a/app/Http/Requests/UserRequest.php b/app/Http/Requests/UserRequest.php index 717baf157..523e73454 100644 --- a/app/Http/Requests/UserRequest.php +++ b/app/Http/Requests/UserRequest.php @@ -40,6 +40,15 @@ public function rules() 'required', 'min:8', ], + 'companies' => [ + 'required', + ], + 'companies.*.id' => [ + 'required', + ], + 'companies.*.role' => [ + 'required', + ], ]; if ($this->getMethod() == 'PUT') { @@ -56,4 +65,13 @@ public function rules() return $rules; } + + public function getUserPayload() + { + return collect($this->validated()) + ->merge([ + 'creator_id' => $this->user()->id, + ]) + ->toArray(); + } } diff --git a/app/Http/Resources/AbilityCollection.php b/app/Http/Resources/AbilityCollection.php new file mode 100644 index 000000000..b743f41a4 --- /dev/null +++ b/app/Http/Resources/AbilityCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'entity_id' => $this->entity_id, + 'entity_type' => $this->entity_type, + 'only_owned' => $this->only_owned, + 'options' => $this->options, + 'scope' => $this->scope, + ]; + } +} diff --git a/app/Http/Resources/AddressCollection.php b/app/Http/Resources/AddressCollection.php new file mode 100644 index 000000000..50df325b5 --- /dev/null +++ b/app/Http/Resources/AddressCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'address_street_1' => $this->address_street_1, + 'address_street_2' => $this->address_street_2, + 'city' => $this->city, + 'state' => $this->state, + 'country_id' => $this->country_id, + 'zip' => $this->zip, + 'phone' => $this->phone, + 'fax' => $this->fax, + 'type' => $this->type, + 'user_id' => $this->user_id, + 'company_id' => $this->company_id, + 'customer_id' => $this->customer_id, + 'country' => $this->when($this->country()->exists(), function () { + return new CountryResource($this->country); + }), + 'user' => $this->when($this->user()->exists(), function () { + return new UserResource($this->user); + }), + ]; + } +} diff --git a/app/Http/Resources/CompanyCollection.php b/app/Http/Resources/CompanyCollection.php new file mode 100644 index 000000000..364728c40 --- /dev/null +++ b/app/Http/Resources/CompanyCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'logo' => $this->logo, + 'logo_path' => $this->logo_path, + 'unique_hash' => $this->unique_hash, + 'owner_id' => $this->owner_id, + 'address' => $this->when($this->address()->exists(), function () { + return new AddressResource($this->address); + }), + 'roles' => RoleResource::collection($this->roles) + ]; + } +} diff --git a/app/Http/Resources/CountryCollection.php b/app/Http/Resources/CountryCollection.php new file mode 100644 index 000000000..9d6fe4074 --- /dev/null +++ b/app/Http/Resources/CountryCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'code' => $this->code, + 'name' => $this->name, + 'phone_code' => $this->phone_code, + ]; + } +} diff --git a/app/Http/Resources/CurrencyCollection.php b/app/Http/Resources/CurrencyCollection.php new file mode 100644 index 000000000..3abb04429 --- /dev/null +++ b/app/Http/Resources/CurrencyCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'code' => $this->code, + 'symbol' => $this->symbol, + 'precision' => $this->precision, + 'thousand_separator' => $this->thousand_separator, + 'decimal_separator' => $this->decimal_separator, + 'swap_currency_symbol' => $this->swap_currency_symbol, + 'exchange_rate' => $this->exchange_rate + ]; + } +} diff --git a/app/Http/Resources/CustomFieldCollection.php b/app/Http/Resources/CustomFieldCollection.php new file mode 100644 index 000000000..057154e8f --- /dev/null +++ b/app/Http/Resources/CustomFieldCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'slug' => $this->slug, + 'label' => $this->label, + 'model_type' => $this->model_type, + 'type' => $this->type, + 'placeholder' => $this->placeholder, + 'options' => $this->options, + 'boolean_answer' => $this->boolean_answer, + 'date_answer' => $this->date_answer, + 'time_answer' => $this->time_answer, + 'string_answer' => $this->string_answer, + 'number_answer' => $this->number_answer, + 'date_time_answer' => $this->date_time_answer, + 'is_required' => $this->is_required, + 'in_use' => $this->in_use, + 'order' => $this->order, + 'company_id' => $this->company_id, + 'default_answer' => $this->default_answer, + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + ]; + } +} diff --git a/app/Http/Resources/CustomFieldValueCollection.php b/app/Http/Resources/CustomFieldValueCollection.php new file mode 100644 index 000000000..939753968 --- /dev/null +++ b/app/Http/Resources/CustomFieldValueCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'custom_field_valuable_type' => $this->custom_field_valuable_type, + 'custom_field_valuable_id' => $this->custom_field_valuable_id, + 'type' => $this->type, + 'boolean_answer' => $this->boolean_answer, + 'date_answer' => $this->date_answer, + 'time_answer' => $this->time_answer, + 'string_answer' => $this->string_answer, + 'number_answer' => $this->number_answer, + 'date_time_answer' => $this->date_time_answer, + 'custom_field_id' => $this->custom_field_id, + 'company_id' => $this->company_id, + 'default_answer' => $this->defaultAnswer, + 'custom_field' => $this->when($this->customField()->exists(), function () { + return new CustomFieldResource($this->customField); + }), + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + ]; + } +} diff --git a/app/Http/Resources/CustomerCollection.php b/app/Http/Resources/CustomerCollection.php new file mode 100644 index 000000000..44e9270b2 --- /dev/null +++ b/app/Http/Resources/CustomerCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'email' => $this->email, + 'phone' => $this->phone, + 'contact_name' => $this->contact_name, + 'company_name' => $this->company_name, + 'website' => $this->website, + 'enable_portal' => $this->enable_portal, + 'currency_id' => $this->currency_id, + 'company_id' => $this->company_id, + 'estimate_prefix' => $this->estimate_prefix, + 'payment_prefix' => $this->payment_prefix, + 'invoice_prefix' => $this->invoice_prefix, + 'facebook_id' => $this->facebook_id, + 'google_id' => $this->google_id, + 'github_id' => $this->github_id, + 'created_at' => $this->created_at, + 'formatted_created_at' => $this->formattedCreatedAt, + 'updated_at' => $this->updated_at, + 'avatar' => $this->avatar, + 'due_amount' => $this->due_amount, + 'base_due_amount' => $this->base_due_amount, + 'prefix' => $this->prefix, + 'billing' => $this->when($this->billingAddress()->exists(), function () { + return new AddressResource($this->billingAddress); + }), + 'shipping' => $this->when($this->shippingAddress()->exists(), function () { + return new AddressResource($this->shippingAddress); + }), + 'fields' => $this->when($this->fields()->exists(), function () { + return CustomFieldValueResource::collection($this->fields); + }), + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + 'currency' => $this->when($this->currency()->exists(), function () { + return new CurrencyResource($this->currency); + }), + ]; + } +} diff --git a/app/Http/Resources/EstimateCollection.php b/app/Http/Resources/EstimateCollection.php new file mode 100644 index 000000000..1198ad5b2 --- /dev/null +++ b/app/Http/Resources/EstimateCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'description' => $this->description, + 'discount_type' => $this->discount_type, + 'quantity' => $this->quantity, + 'unit_name' => $this->unit_name, + 'discount' => $this->discount, + 'discount_val' => $this->discount_val, + 'price' => $this->price, + 'tax' => $this->tax, + 'total' => $this->total, + 'item_id' => $this->item_id, + 'estimate_id' => $this->estimate_id, + 'company_id' => $this->company_id, + 'exchange_rate' => $this->exchange_rate, + 'base_discount_val' => $this->base_discount_val, + 'base_price' => $this->base_price, + 'base_tax' => $this->base_tax, + 'base_total' => $this->base_total, + 'taxes' => $this->when($this->taxes()->exists(), function () { + return TaxResource::collection($this->taxes); + }), + 'fields' => $this->when($this->fields()->exists(), function () { + return CustomFieldValueResource::collection($this->fields); + }), + ]; + } +} diff --git a/app/Http/Resources/EstimateResource.php b/app/Http/Resources/EstimateResource.php new file mode 100644 index 000000000..3aff3cb1e --- /dev/null +++ b/app/Http/Resources/EstimateResource.php @@ -0,0 +1,70 @@ + $this->id, + 'estimate_date' => $this->estimate_date, + 'expiry_date' => $this->expiry_date, + 'estimate_number' => $this->estimate_number, + 'status' => $this->status, + 'reference_number' => $this->reference_number, + 'tax_per_item' => $this->tax_per_item, + 'discount_per_item' => $this->discount_per_item, + 'notes' => $this->notes, + 'discount' => $this->discount, + 'discount_type' => $this->discount_type, + 'discount_val' => $this->discount_val, + 'sub_total' => $this->sub_total, + 'total' => $this->total, + 'tax' => $this->tax, + 'unique_hash' => $this->unique_hash, + 'creator_id' => $this->creator_id, + 'template_name' => $this->template_name, + 'customer_id' => $this->customer_id, + 'exchange_rate' => $this->exchange_rate, + 'base_discount_val' => $this->base_discount_val, + 'base_sub_total' => $this->base_sub_total, + 'base_total' => $this->base_total, + 'base_tax' => $this->base_tax, + 'sequence_number' => $this->sequence_number, + 'currency_id' => $this->currency_id, + 'formatted_expiry_date' => $this->formattedExpiryDate, + 'formatted_estimate_date' => $this->formattedEstimateDate, + 'estimate_pdf_url' => $this->estimatePdfUrl, + 'items' => $this->when($this->items()->exists(), function () { + return EstimateItemResource::collection($this->items); + }), + 'customer' => $this->when($this->customer()->exists(), function () { + return new CustomerResource($this->customer); + }), + 'creator' => $this->when($this->creator()->exists(), function () { + return new UserResource($this->creator); + }), + 'taxes' => $this->when($this->taxes()->exists(), function () { + return TaxResource::collection($this->taxes); + }), + 'fields' => $this->when($this->fields()->exists(), function () { + return CustomFieldValueResource::collection($this->fields); + }), + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + 'currency' => $this->when($this->currency()->exists(), function () { + return new CurrencyResource($this->currency); + }), + ]; + } +} diff --git a/app/Http/Resources/ExchangeRateLogCollection.php b/app/Http/Resources/ExchangeRateLogCollection.php new file mode 100644 index 000000000..b701d30d6 --- /dev/null +++ b/app/Http/Resources/ExchangeRateLogCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'company_id' => $this->company_id, + 'base_currency_id' => $this->base_currency_id, + 'currency_id' => $this->currency_id, + 'exchange_rate' => $this->exchange_rate, + ]; + } +} diff --git a/app/Http/Resources/ExchangeRateProviderCollection.php b/app/Http/Resources/ExchangeRateProviderCollection.php new file mode 100644 index 000000000..30864c101 --- /dev/null +++ b/app/Http/Resources/ExchangeRateProviderCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'key' => $this->key, + 'driver' => $this->driver, + 'currencies' => $this->currencies, + 'driver_config' => $this->driver_config, + 'company_id' => $this->company_id, + 'active' => $this->active, + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + ]; + } +} diff --git a/app/Http/Resources/ExpenseCategoryCollection.php b/app/Http/Resources/ExpenseCategoryCollection.php new file mode 100644 index 000000000..512be3838 --- /dev/null +++ b/app/Http/Resources/ExpenseCategoryCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'description' => $this->description, + 'company_id' => $this->company_id, + 'amount' => $this->amount, + 'formatted_created_at' => $this->formattedCreatedAt, + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + ]; + } +} diff --git a/app/Http/Resources/ExpenseCollection.php b/app/Http/Resources/ExpenseCollection.php new file mode 100644 index 000000000..23a6f4818 --- /dev/null +++ b/app/Http/Resources/ExpenseCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'expense_date' => $this->expense_date, + 'amount' => $this->amount, + 'notes' => $this->notes, + 'customer_id' => $this->customer_id, + 'attachment_receipt_url' => $this->receipt_url, + 'attachment_receipt' => $this->receipt, + 'attachment_receipt_meta' => $this->receipt_meta, + 'company_id' => $this->company_id, + 'expense_category_id' => $this->expense_category_id, + 'creator_id' => $this->creator_id, + 'formatted_expense_date' => $this->formattedExpenseDate, + 'formatted_created_at' => $this->formattedCreatedAt, + 'exchange_rate' => $this->exchange_rate, + 'currency_id' => $this->currency_id, + 'base_amount' => $this->base_amount, + 'payment_method_id' => $this->payment_method_id, + 'customer' => $this->when($this->customer()->exists(), function () { + return new CustomerResource($this->customer); + }), + 'expense_category' => $this->when($this->category()->exists(), function () { + return new ExpenseCategoryResource($this->category); + }), + 'creator' => $this->when($this->creator()->exists(), function () { + return new UserResource($this->creator); + }), + 'fields' => $this->when($this->fields()->exists(), function () { + return CustomFieldValueResource::collection($this->fields); + }), + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + 'currency' => $this->when($this->currency()->exists(), function () { + return new CurrencyResource($this->currency); + }), + 'payment_method' => $this->when($this->paymentMethod()->exists(), function () { + return new PaymentMethodResource($this->paymentMethod); + }), + ]; + } +} diff --git a/app/Http/Resources/FileDiskCollection.php b/app/Http/Resources/FileDiskCollection.php new file mode 100644 index 000000000..b82532b48 --- /dev/null +++ b/app/Http/Resources/FileDiskCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'type' => $this->type, + 'driver' => $this->driver, + 'set_as_default' => $this->set_as_default, + 'credentials' => $this->credentials, + 'company_id' => $this->company_id, + ]; + } +} diff --git a/app/Http/Resources/InvoiceCollection.php b/app/Http/Resources/InvoiceCollection.php new file mode 100644 index 000000000..c7ee564d1 --- /dev/null +++ b/app/Http/Resources/InvoiceCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'description' => $this->description, + 'discount_type' => $this->discount_type, + 'price' => $this->price, + 'quantity' => $this->quantity, + 'unit_name' => $this->unit_name, + 'discount' => $this->discount, + 'discount_val' => $this->discount_val, + 'tax' => $this->tax, + 'total' => $this->total, + 'invoice_id' => $this->invoice_id, + 'item_id' => $this->item_id, + 'company_id' => $this->company_id, + 'base_price' => $this->base_price, + 'exchange_rate' => $this->exchange_rate, + 'base_discount_val' => $this->base_discount_val, + 'base_tax' => $this->base_tax, + 'base_total' => $this->base_total, + 'recurring_invoice_id' => $this->recurring_invoice_id, + 'taxes' => $this->when($this->taxes()->exists(), function () { + return TaxResource::collection($this->taxes); + }), + 'fields' => $this->when($this->fields()->exists(), function () { + return CustomFieldValueResource::collection($this->fields); + }), + ]; + } +} diff --git a/app/Http/Resources/InvoiceResource.php b/app/Http/Resources/InvoiceResource.php new file mode 100644 index 000000000..f119f4da7 --- /dev/null +++ b/app/Http/Resources/InvoiceResource.php @@ -0,0 +1,78 @@ + $this->id, + 'invoice_date' => $this->invoice_date, + 'due_date' => $this->due_date, + 'invoice_number' => $this->invoice_number, + 'reference_number' => $this->reference_number, + 'status' => $this->status, + 'paid_status' => $this->paid_status, + 'tax_per_item' => $this->tax_per_item, + 'discount_per_item' => $this->discount_per_item, + 'notes' => $this->notes, + 'discount_type' => $this->discount_type, + 'discount' => $this->discount, + 'discount_val' => $this->discount_val, + 'sub_total' => $this->sub_total, + 'total' => $this->total, + 'tax' => $this->tax, + 'due_amount' => $this->due_amount, + 'sent' => $this->sent, + 'viewed' => $this->viewed, + 'unique_hash' => $this->unique_hash, + 'template_name' => $this->template_name, + 'customer_id' => $this->customer_id, + 'recurring_invoice_id' => $this->recurring_invoice_id, + 'sequence_number' => $this->sequence_number, + 'exchange_rate' => $this->exchange_rate, + 'base_discount_val' => $this->base_discount_val, + 'base_sub_total' => $this->base_sub_total, + 'base_total' => $this->base_total, + 'creator_id' => $this->creator_id, + 'base_tax' => $this->base_tax, + 'base_due_amount' => $this->base_due_amount, + 'currency_id' => $this->currency_id, + 'formatted_created_at' => $this->formattedCreatedAt, + 'invoice_pdf_url' => $this->invoicePdfUrl, + 'formatted_invoice_date' => $this->formattedInvoiceDate, + 'formatted_due_date' => $this->formattedDueDate, + 'allow_edit' => $this->allow_edit, + 'items' => $this->when($this->items()->exists(), function () { + return InvoiceItemResource::collection($this->items); + }), + 'customer' => $this->when($this->customer()->exists(), function () { + return new CustomerResource($this->customer); + }), + 'creator' => $this->when($this->creator()->exists(), function () { + return new UserResource($this->creator); + }), + 'taxes' => $this->when($this->taxes()->exists(), function () { + return TaxResource::collection($this->taxes); + }), + 'fields' => $this->when($this->fields()->exists(), function () { + return CustomFieldValueResource::collection($this->fields); + }), + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + 'currency' => $this->when($this->currency()->exists(), function () { + return new CurrencyResource($this->currency); + }), + ]; + } +} diff --git a/app/Http/Resources/ItemCollection.php b/app/Http/Resources/ItemCollection.php new file mode 100644 index 000000000..da74c029d --- /dev/null +++ b/app/Http/Resources/ItemCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'description' => $this->description, + 'price' => $this->price, + 'unit_id' => $this->unit_id, + 'company_id' => $this->company_id, + 'creator_id' => $this->creator_id, + 'currency_id' => $this->currency_id, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'tax_per_item' => $this->tax_per_item, + 'formatted_created_at' => $this->formattedCreatedAt, + 'unit' => $this->when($this->unit()->exists(), function () { + return new UnitResource($this->unit); + }), + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + 'taxes' => $this->when($this->taxes()->exists(), function () { + return TaxResource::collection($this->taxes); + }), + 'currency' => $this->when($this->currency()->exists(), function () { + return new CurrencyResource($this->currency); + }), + ]; + } +} diff --git a/app/Http/Resources/NoteCollection.php b/app/Http/Resources/NoteCollection.php new file mode 100644 index 000000000..4dfa780d5 --- /dev/null +++ b/app/Http/Resources/NoteCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'type' => $this->type, + 'name' => $this->name, + 'notes' => $this->notes, + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + ]; + } +} diff --git a/app/Http/Resources/PaymentCollection.php b/app/Http/Resources/PaymentCollection.php new file mode 100644 index 000000000..f3d0c6f43 --- /dev/null +++ b/app/Http/Resources/PaymentCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'company_id' => $this->company_id, + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + ]; + } +} diff --git a/app/Http/Resources/PaymentResource.php b/app/Http/Resources/PaymentResource.php new file mode 100644 index 000000000..7d3f31cf9 --- /dev/null +++ b/app/Http/Resources/PaymentResource.php @@ -0,0 +1,56 @@ + $this->id, + 'payment_number' => $this->payment_number, + 'payment_date' => $this->payment_date, + 'notes' => $this->notes, + 'amount' => $this->amount, + 'unique_hash' => $this->unique_hash, + 'invoice_id' => $this->invoice_id, + 'company_id' => $this->company_id, + 'payment_method_id' => $this->payment_method_id, + 'creator_id' => $this->creator_id, + 'customer_id' => $this->customer_id, + 'exchange_rate' => $this->exchange_rate, + 'base_amount' => $this->base_amount, + 'currency_id' => $this->currency_id, + 'sequence_number' => $this->sequence_number, + 'formatted_created_at' => $this->formattedCreatedAt, + 'formatted_payment_date' => $this->formattedPaymentDate, + 'payment_pdf_url' => $this->paymentPdfUrl, + 'customer' => $this->when($this->customer()->exists(), function () { + return new CustomerResource($this->customer); + }), + 'invoice' => $this->when($this->invoice()->exists(), function () { + return new InvoiceResource($this->invoice); + }), + 'payment_method' => $this->when($this->paymentMethod()->exists(), function () { + return new PaymentMethodResource($this->paymentMethod); + }), + 'fields' => $this->when($this->fields()->exists(), function () { + return CustomFieldValueResource::collection($this->fields); + }), + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + 'currency' => $this->when($this->currency()->exists(), function () { + return new CurrencyResource($this->currency); + }), + ]; + } +} diff --git a/app/Http/Resources/RecurringInvoiceCollection.php b/app/Http/Resources/RecurringInvoiceCollection.php new file mode 100644 index 000000000..f19905df2 --- /dev/null +++ b/app/Http/Resources/RecurringInvoiceCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'starts_at' => $this->starts_at, + 'formatted_starts_at' => $this->formattedStartsAt, + 'formatted_created_at' => $this->formattedCreatedAt, + 'formatted_next_invoice_at' => $this->formattedNextInvoiceAt, + 'formatted_limit_date' => $this->formattedLimitDate, + 'send_automatically' => $this->send_automatically, + 'customer_id' => $this->customer_id, + 'company_id' => $this->company_id, + 'creator_id' => $this->creator_id, + 'status' => $this->status, + 'next_invoice_at' => $this->next_invoice_at, + 'frequency' => $this->frequency, + 'limit_by' => $this->limit_by, + 'limit_count' => $this->limit_count, + 'limit_date' => $this->limit_date, + 'exchange_rate' => $this->exchange_rate, + 'tax_per_item' => $this->tax_per_item, + 'discount_per_item' => $this->discount_per_item, + 'notes' => $this->notes, + 'discount_type' => $this->discount_type, + 'discount' => $this->discount, + 'discount_val' => $this->discount_val, + 'sub_total' => $this->sub_total, + 'total' => $this->total, + 'tax' => $this->tax, + 'due_amount' => $this->due_amount, + 'template_name' => $this->template_name, + 'fields' => $this->when($this->fields()->exists(), function () { + return CustomFieldValueResource::collection($this->fields); + }), + 'items' => $this->when($this->items()->exists(), function () { + return InvoiceItemResource::collection($this->items); + }), + 'customer' => $this->when($this->customer()->exists(), function () { + return new CustomerResource($this->customer); + }), + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + 'invoices' => $this->when($this->invoices()->exists(), function () { + return InvoiceResource::collection($this->invoices); + }), + 'taxes' => $this->when($this->taxes()->exists(), function () { + return TaxResource::collection($this->taxes); + }), + 'creator' => $this->when($this->creator()->exists(), function () { + return new UserResource($this->creator); + }), + 'currency' => $this->when($this->currency()->exists(), function () { + return new CurrencyResource($this->currency); + }), + ]; + } +} diff --git a/app/Http/Resources/RoleCollection.php b/app/Http/Resources/RoleCollection.php new file mode 100644 index 000000000..e4e1b7cae --- /dev/null +++ b/app/Http/Resources/RoleCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'title' => $this->title, + 'level' => $this->level, + 'formatted_created_at' => $this->getFormattedAt(), + 'abilities' => $this->getAbilities() + ]; + } + + public function getFormattedAt() + { + $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->scope); + + return Carbon::parse($this->created_at)->format($dateFormat); + } +} diff --git a/app/Http/Resources/TaxCollection.php b/app/Http/Resources/TaxCollection.php new file mode 100644 index 000000000..c7dcbb86b --- /dev/null +++ b/app/Http/Resources/TaxCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'tax_type_id' => $this->tax_type_id, + 'invoice_id' => $this->invoice_id, + 'estimate_id' => $this->estimate_id, + 'invoice_item_id' => $this->invoice_item_id, + 'estimate_item_id' => $this->estimate_item_id, + 'item_id' => $this->item_id, + 'company_id' => $this->company_id, + 'name' => $this->name, + 'amount' => $this->amount, + 'percent' => $this->percent, + 'compound_tax' => $this->compound_tax, + 'base_amount' => $this->base_amount, + 'currency_id' => $this->currency_id, + 'recurring_invoice_id' => $this->recurring_invoice_id, + 'tax_type' => $this->when($this->taxType()->exists(), function () { + return new TaxTypeResource($this->taxType); + }), + 'currency' => $this->when($this->currency()->exists(), function () { + return new CurrencyResource($this->currency); + }), + ]; + } +} diff --git a/app/Http/Resources/TaxTypeCollection.php b/app/Http/Resources/TaxTypeCollection.php new file mode 100644 index 000000000..8866538f6 --- /dev/null +++ b/app/Http/Resources/TaxTypeCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'percent' => $this->percent, + 'compound_tax' => $this->compound_tax, + 'collective_tax' => $this->collective_tax, + 'description' => $this->description, + 'company_id' => $this->company_id, + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + ]; + } +} diff --git a/app/Http/Resources/UnitCollection.php b/app/Http/Resources/UnitCollection.php new file mode 100644 index 000000000..163d4ca16 --- /dev/null +++ b/app/Http/Resources/UnitCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'company_id' => $this->company_id, + 'company' => $this->when($this->company()->exists(), function () { + return new CompanyResource($this->company); + }), + ]; + } +} diff --git a/app/Http/Resources/UserCollection.php b/app/Http/Resources/UserCollection.php new file mode 100644 index 000000000..25f654658 --- /dev/null +++ b/app/Http/Resources/UserCollection.php @@ -0,0 +1,19 @@ + $this->id, + 'name' => $this->name, + 'email' => $this->email, + 'phone' => $this->phone, + 'role' => $this->role, + 'contact_name' => $this->contact_name, + 'company_name' => $this->company_name, + 'website' => $this->website, + 'enable_portal' => $this->enable_portal, + 'currency_id' => $this->currency_id, + 'facebook_id' => $this->facebook_id, + 'google_id' => $this->google_id, + 'github_id' => $this->github_id, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'avatar' => $this->avatar, + 'is_owner' => $this->isOwner(), + 'roles' => $this->roles, + 'formatted_created_at' => $this->formattedCreatedAt, + 'currency' => $this->when($this->currency()->exists(), function () { + return new CurrencyResource($this->currency); + }), + 'companies' => $this->when($this->companies()->exists(), function () { + return CompanyResource::collection($this->companies); + }) + ]; + } +} diff --git a/app/Listeners/Updates/v3/Version300.php b/app/Listeners/Updates/v3/Version300.php index cadd9738d..55e5b1543 100644 --- a/app/Listeners/Updates/v3/Version300.php +++ b/app/Listeners/Updates/v3/Version300.php @@ -11,6 +11,7 @@ use Crater\Models\Unit; use Crater\Models\User; use Illuminate\Database\Schema\Blueprint; +use Vinkla\Hashids\Facades\Hashids; class Version300 extends Listener { @@ -130,7 +131,7 @@ public function databaseChanges() if ($payments) { foreach ($payments as $payment) { - $payment->unique_hash = str_random(60); + $payment->unique_hash = Hashids::connection(Payment::class)->encode($payment->id); $payment->save(); $paymentMethod = PaymentMethod::where('name', $payment->payment_mode) diff --git a/app/Mail/EstimateViewedMail.php b/app/Mail/EstimateViewedMail.php index 8e862001e..a29d8f6c7 100644 --- a/app/Mail/EstimateViewedMail.php +++ b/app/Mail/EstimateViewedMail.php @@ -30,10 +30,7 @@ public function __construct($data) */ public function build() { - $email = $this->data['user']['email']; - $name = $this->data['user']['name']; - - return $this->from($email, $name) + return $this->from(config('mail.from.address'), config('mail.from.name')) ->markdown('emails.viewed.estimate', ['data', $this->data]); } } diff --git a/app/Mail/InvoiceViewedMail.php b/app/Mail/InvoiceViewedMail.php index 4f5125b0d..94e858b31 100644 --- a/app/Mail/InvoiceViewedMail.php +++ b/app/Mail/InvoiceViewedMail.php @@ -30,10 +30,7 @@ public function __construct($data) */ public function build() { - $email = $this->data['user']['email']; - $name = $this->data['user']['name']; - - return $this->from($email, $name) + return $this->from(config('mail.from.address'), config('mail.from.name')) ->markdown('emails.viewed.invoice', ['data', $this->data]); } } diff --git a/app/Mail/SendInvoiceMail.php b/app/Mail/SendInvoiceMail.php index c5267de92..d917676af 100644 --- a/app/Mail/SendInvoiceMail.php +++ b/app/Mail/SendInvoiceMail.php @@ -2,7 +2,6 @@ namespace Crater\Mail; -use Config; use Crater\Models\EmailLog; use Crater\Models\Invoice; use Illuminate\Bus\Queueable; diff --git a/app/Models/Address.php b/app/Models/Address.php index 8a699e53d..e51bae42b 100644 --- a/app/Models/Address.php +++ b/app/Models/Address.php @@ -25,6 +25,11 @@ public function user() return $this->belongsTo(User::class); } + public function customer() + { + return $this->belongsTo(Customer::class); + } + public function company() { return $this->belongsTo(Company::class); diff --git a/app/Models/Company.php b/app/Models/Company.php index c02706d29..7f70bf6a6 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -4,6 +4,8 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Silber\Bouncer\BouncerFacade; +use Silber\Bouncer\Database\Role; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; @@ -13,10 +15,18 @@ class Company extends Model implements HasMedia use HasFactory; - protected $fillable = ['name', 'logo', 'unique_hash']; + protected $guarded = [ + 'id' + ]; protected $appends = ['logo', 'logo_path']; + public function getRolesAttribute() + { + return Role::where('scope', $this->id) + ->get(); + } + public function getLogoPathAttribute() { $logo = $this->getMedia('logo')->first(); @@ -45,9 +55,14 @@ public function getLogoAttribute() return null; } - public function user() + public function customers() + { + return $this->hasMany(Customer::class); + } + + public function owner() { - return $this->hasOne(User::class); + return $this->belongsTo(User::class, 'owner_id'); } public function settings() @@ -55,8 +70,305 @@ public function settings() return $this->hasMany(CompanySetting::class); } + public function recurringInvoices() + { + return $this->hasMany(RecurringInvoice::class); + } + + public function customFields() + { + return $this->hasMany(CustomField::class); + } + + public function customFieldValues() + { + return $this->hasMany(CustomFieldValue::class); + } + + public function exchangeRateLogs() + { + return $this->hasMany(ExchangeRateLog::class); + } + + public function exchangeRateProviders() + { + return $this->hasMany(ExchangeRateProvider::class); + } + + public function invoices() + { + return $this->hasMany(Invoice::class); + } + + public function expenses() + { + return $this->hasMany(Expense::class); + } + + public function units() + { + return $this->hasMany(Unit::class); + } + + public function expenseCategories() + { + return $this->hasMany(ExpenseCategory::class); + } + + public function taxTypes() + { + return $this->hasMany(TaxType::class); + } + + public function items() + { + return $this->hasMany(Item::class); + } + + public function payments() + { + return $this->hasMany(Payment::class); + } + + public function paymentMethods() + { + return $this->hasMany(PaymentMethod::class); + } + + public function estimates() + { + return $this->hasMany(Estimate::class); + } + public function address() { return $this->hasOne(Address::class); } + + public function users() + { + return $this->belongsToMany(User::class, 'user_company', 'user_id', 'company_id'); + } + + public function setupRoles() + { + BouncerFacade::scope()->to($this->id); + + $super_admin = BouncerFacade::role()->firstOrCreate([ + 'name' => 'super admin', + 'title' => 'Super Admin', + 'scope' => $this->id + ]); + + foreach (config('abilities.abilities') as $ability) { + BouncerFacade::allow($super_admin)->to($ability['ability'], $ability['model']); + } + } + + public function setupDefaultPaymentMethods() + { + PaymentMethod::create(['name' => 'Cash', 'company_id' => $this->id]); + PaymentMethod::create(['name' => 'Check', 'company_id' => $this->id]); + PaymentMethod::create(['name' => 'Credit Card', 'company_id' => $this->id]); + PaymentMethod::create(['name' => 'Bank Transfer', 'company_id' => $this->id]); + } + + public function setupDefaultUnits() + { + Unit::create(['name' => 'box', 'company_id' => $this->id]); + Unit::create(['name' => 'cm', 'company_id' => $this->id]); + Unit::create(['name' => 'dz', 'company_id' => $this->id]); + Unit::create(['name' => 'ft', 'company_id' => $this->id]); + Unit::create(['name' => 'g', 'company_id' => $this->id]); + Unit::create(['name' => 'in', 'company_id' => $this->id]); + Unit::create(['name' => 'kg', 'company_id' => $this->id]); + Unit::create(['name' => 'km', 'company_id' => $this->id]); + Unit::create(['name' => 'lb', 'company_id' => $this->id]); + Unit::create(['name' => 'mg', 'company_id' => $this->id]); + Unit::create(['name' => 'pc', 'company_id' => $this->id]); + } + + public function setupDefaultSettings() + { + $defaultInvoiceEmailBody = 'You have received a new invoice from {COMPANY_NAME}.
Please download using the button below:'; + $defaultEstimateEmailBody = 'You have received a new estimate from {COMPANY_NAME}.
Please download using the button below:'; + $defaultPaymentEmailBody = 'Thank you for the payment.
Please download your payment receipt using the button below:'; + $billingAddressFormat = '

{BILLING_ADDRESS_NAME}

{BILLING_ADDRESS_STREET_1}

{BILLING_ADDRESS_STREET_2}

{BILLING_CITY} {BILLING_STATE}

{BILLING_COUNTRY} {BILLING_ZIP_CODE}

{BILLING_PHONE}

'; + $shippingAddressFormat = '

{SHIPPING_ADDRESS_NAME}

{SHIPPING_ADDRESS_STREET_1}

{SHIPPING_ADDRESS_STREET_2}

{SHIPPING_CITY} {SHIPPING_STATE}

{SHIPPING_COUNTRY} {SHIPPING_ZIP_CODE}

{SHIPPING_PHONE}

'; + $companyAddressFormat = '

{COMPANY_NAME}

{COMPANY_ADDRESS_STREET_1}

{COMPANY_ADDRESS_STREET_2}

{COMPANY_CITY} {COMPANY_STATE}

{COMPANY_COUNTRY} {COMPANY_ZIP_CODE}

{COMPANY_PHONE}

'; + $paymentFromCustomerAddress = '

{BILLING_ADDRESS_NAME}

{BILLING_ADDRESS_STREET_1}

{BILLING_ADDRESS_STREET_2}

{BILLING_CITY} {BILLING_STATE} {BILLING_ZIP_CODE}

{BILLING_COUNTRY}

{BILLING_PHONE}

'; + + $settings = [ + 'invoice_auto_generate' => 'YES', + 'payment_auto_generate' => 'YES', + 'estimate_auto_generate' => 'YES', + 'save_pdf_to_disk' => 'NO', + 'invoice_mail_body' => $defaultInvoiceEmailBody, + 'estimate_mail_body' => $defaultEstimateEmailBody, + 'payment_mail_body' => $defaultPaymentEmailBody, + 'invoice_company_address_format' => $companyAddressFormat, + 'invoice_shipping_address_format' => $shippingAddressFormat, + 'invoice_billing_address_format' => $billingAddressFormat, + 'estimate_company_address_format' => $companyAddressFormat, + 'estimate_shipping_address_format' => $shippingAddressFormat, + 'estimate_billing_address_format' => $billingAddressFormat, + 'payment_company_address_format' => $companyAddressFormat, + 'payment_from_customer_address_format' => $paymentFromCustomerAddress, + 'currency' => request()->currency ?? 12, + 'time_zone' => 'Asia/Kolkata', + 'language' => 'en', + 'fiscal_year' => '1-12', + 'carbon_date_format' => 'Y/m/d', + 'moment_date_format' => 'YYYY/MM/DD', + 'notification_email' => 'noreply@crater.in', + 'notify_invoice_viewed' => 'NO', + 'notify_estimate_viewed' => 'NO', + 'tax_per_item' => 'NO', + 'discount_per_item' => 'NO', + 'invoice_auto_generate' => 'YES', + 'invoice_email_attachment' => 'NO', + 'estimate_auto_generate' => 'YES', + 'estimate_email_attachment' => 'NO', + 'payment_auto_generate' => 'YES', + 'payment_email_attachment' => 'NO', + 'save_pdf_to_disk' => 'NO', + 'retrospective_edits' => 'allow', + 'invoice_number_format' => '{{SERIES:INV}}{{DELIMITER:-}}{{SEQUENCE:6}}', + 'estimate_number_format' => '{{SERIES:EST}}{{DELIMITER:-}}{{SEQUENCE:6}}', + 'payment_number_format' => '{{SERIES:PAY}}{{DELIMITER:-}}{{SEQUENCE:6}}', + 'estimate_set_expiry_date_automatically' => 'YES', + 'estimate_expiry_date_days' => 7, + 'invoice_set_due_date_automatically' => 'YES', + 'invoice_due_date_days' => 7, + 'bulk_exchange_rate_configured' => 'YES', + 'estimate_convert_action' => 'no_action' + ]; + + CompanySetting::setSettings($settings, $this->id); + } + + public function setupDefaultData() + { + $this->setupRoles(); + $this->setupDefaultPaymentMethods(); + $this->setupDefaultUnits(); + $this->setupDefaultSettings(); + + return true; + } + + public function deleteCompany($user) + { + if ($this->exchangeRateLogs()->exists()) { + $this->exchangeRateLogs()->delete(); + } + + if ($this->exchangeRateProviders()->exists()) { + $this->exchangeRateProviders()->delete(); + } + + if ($this->expenses()->exists()) { + $this->expenses()->delete(); + } + + if ($this->expenseCategories()->exists()) { + $this->expenseCategories()->delete(); + } + + if ($this->payments()->exists()) { + $this->payments()->delete(); + } + + if ($this->paymentMethods()->exists()) { + $this->paymentMethods()->delete(); + } + + if ($this->customFieldValues()->exists()) { + $this->customFieldValues()->delete(); + } + + + if ($this->customFields()->exists()) { + $this->customFields()->delete(); + } + + if ($this->invoices()->exists()) { + $this->invoices->map(function ($invoice) { + $this->checkModelData($invoice); + }); + + $this->invoices()->delete(); + } + + if ($this->recurringInvoices()->exists()) { + $this->recurringInvoices->map(function ($recurringInvoice) { + $this->checkModelData($recurringInvoice); + }); + + $this->recurringInvoices()->delete(); + } + + if ($this->estimates()->exists()) { + $this->estimates->map(function ($estimate) { + $this->checkModelData($estimate); + }); + + $this->estimates()->delete(); + } + + if ($this->items()->exists()) { + $this->items()->delete(); + } + + if ($this->taxTypes()->exists()) { + $this->taxTypes()->delete(); + } + + if ($this->customers()->exists()) { + $this->customers->map(function ($customer) { + if ($customer->addresses()->exists()) { + $customer->addresses()->delete(); + } + + $customer->delete(); + }); + } + + $roles = Role::when($this->id, function ($query) { + return $query->where('scope', $this->id); + })->get(); + + if ($roles) { + $roles->map(function ($role) { + $role->delete(); + }); + } + + if ($this->users()->exists()) { + $user->companies()->detach($this->id); + } + + $this->settings()->delete(); + + $this->address()->delete(); + + $this->delete(); + + return true; + } + + public function checkModelData($model) + { + $model->items->map(function ($item) { + if ($item->taxes()->exists()) { + $item->taxes()->delete(); + } + + $item->delete(); + }); + + if ($model->taxes()->exists()) { + $model->taxes()->delete(); + } + } } diff --git a/app/Models/CompanySetting.php b/app/Models/CompanySetting.php index 4fe81a0fa..d1927c2d8 100644 --- a/app/Models/CompanySetting.php +++ b/app/Models/CompanySetting.php @@ -38,16 +38,19 @@ public static function setSettings($settings, $company_id) } } - public static function getSettings($settings, $company_id) + public static function getAllSettings($company_id) { - $settings = static::whereIn('option', $settings)->whereCompany($company_id)->get(); - $companySettings = []; - - foreach ($settings as $setting) { - $companySettings[$setting->option] = $setting->value; - } + return static::whereCompany($company_id)->get()->mapWithKeys(function ($item) { + return [$item['option'] => $item['value']]; + }); + } - return $companySettings; + public static function getSettings($settings, $company_id) + { + return static::whereIn('option', $settings)->whereCompany($company_id) + ->get()->mapWithKeys(function ($item) { + return [$item['option'] => $item['value']]; + }); } public static function getSetting($key, $company_id) diff --git a/app/Models/Currency.php b/app/Models/Currency.php index 0660dd59b..b852f1148 100644 --- a/app/Models/Currency.php +++ b/app/Models/Currency.php @@ -9,13 +9,7 @@ class Currency extends Model { use HasFactory; - protected $fillable = [ - 'name', - 'code', - 'symbol', - 'precision', - 'thousand_separator', - 'decimal_separator', - 'position', + protected $guarded = [ + 'id' ]; } diff --git a/app/Models/CustomField.php b/app/Models/CustomField.php index 48fc3e315..e9902d39c 100644 --- a/app/Models/CustomField.php +++ b/app/Models/CustomField.php @@ -55,19 +55,24 @@ public function getDefaultAnswerAttribute() return $this->$value_type; } + public function getInUseAttribute() + { + return $this->customFieldValues()->exists(); + } + public function company() { return $this->belongsTo(Company::class); } - public function customFieldValue() + public function customFieldValues() { return $this->hasMany(CustomFieldValue::class); } - public function scopeWhereCompany($query, $company_id) + public function scopeWhereCompany($query) { - $query->where('custom_fields.company_id', $company_id); + return $query->where('custom_fields.company_id', request()->header('company')); } public function scopeWhereSearch($query, $search) @@ -81,7 +86,7 @@ public function scopeWhereSearch($query, $search) public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); @@ -110,40 +115,17 @@ public static function createCustomField($request) $data = $request->validated(); $data[getCustomFieldValueKey($request->type)] = $request->default_answer; $data['company_id'] = $request->header('company'); - $data['slug'] = clean_slug($request->model_type, $request->label); + $data['slug'] = clean_slug($request->model_type, $request->name); return CustomField::create($data); } public function updateCustomField($request) { - $oldSlug = $this->slug; $data = $request->validated(); $data[getCustomFieldValueKey($request->type)] = $request->default_answer; - $data['slug'] = clean_slug($request->model_type, $request->label, $this->id); $this->update($data); - if ($oldSlug !== $data['slug']) { - $settings = [ - 'invoice_company_address_format', - 'invoice_shipping_address_format', - 'invoice_billing_address_format', - 'estimate_company_address_format', - 'estimate_shipping_address_format', - 'estimate_billing_address_format', - 'payment_company_address_format', - 'payment_from_customer_address_format', - ]; - - $settings = CompanySetting::getSettings($settings, $this->company_id); - - foreach ($settings as $key => $value) { - $settings[$key] = str_replace($oldSlug, $data['slug'], $value); - } - - CompanySetting::setSettings($settings, $this->company_id); - } - return $this; } } diff --git a/app/Models/CustomFieldValue.php b/app/Models/CustomFieldValue.php index 8f3395772..2a8624257 100644 --- a/app/Models/CustomFieldValue.php +++ b/app/Models/CustomFieldValue.php @@ -23,15 +23,15 @@ public function setDateAnswerAttribute($value) if ($value && $value != null) { $this->attributes['date_answer'] = Carbon::createFromFormat('Y-m-d', $value); } - $this->attributes['date_answer'] = null; } public function setTimeAnswerAttribute($value) { if ($value && $value != null) { $this->attributes['time_answer'] = date("H:i:s", strtotime($value)); + } else { + $this->attributes['time_answer'] = null; } - $this->attributes['time_answer'] = null; } public function setDateTimeAnswerAttribute($value) diff --git a/app/Models/Customer.php b/app/Models/Customer.php new file mode 100644 index 000000000..013ac14b6 --- /dev/null +++ b/app/Models/Customer.php @@ -0,0 +1,326 @@ +company_id); + + return Carbon::parse($this->created_at)->format($dateFormat); + } + + public function setPasswordAttribute($value) + { + if ($value != null) { + $this->attributes['password'] = bcrypt($value); + } + } + + public function estimates() + { + return $this->hasMany(Estimate::class); + } + + public function expenses() + { + return $this->hasMany(Expense::class); + } + + public function invoices() + { + return $this->hasMany(Invoice::class); + } + + public function payments() + { + return $this->hasMany(Payment::class); + } + + public function addresses() + { + return $this->hasMany(Address::class); + } + + public function recurringInvoices() + { + return $this->hasMany(RecurringInvoice::class); + } + + public function currency() + { + return $this->belongsTo(Currency::class); + } + + public function creator() + { + return $this->belongsTo(Customer::class, 'creator_id'); + } + + public function company() + { + return $this->belongsTo(Company::class); + } + + public function billingAddress() + { + return $this->hasOne(Address::class)->where('type', Address::BILLING_TYPE); + } + + public function shippingAddress() + { + return $this->hasOne(Address::class)->where('type', Address::SHIPPING_TYPE); + } + + public function getAvatarAttribute() + { + $avatar = $this->getMedia('customer_avatar')->first(); + + if ($avatar) { + return asset($avatar->getUrl()); + } + + return 0; + } + + public static function deleteCustomers($ids) + { + foreach ($ids as $id) { + $customer = self::find($id); + + if ($customer->estimates()->exists()) { + $customer->estimates()->delete(); + } + + if ($customer->invoices()->exists()) { + $customer->invoices()->delete(); + } + + if ($customer->payments()->exists()) { + $customer->payments()->delete(); + } + + if ($customer->addresses()->exists()) { + $customer->addresses()->delete(); + } + + if ($customer->expenses()->exists()) { + $customer->expenses()->delete(); + } + + if ($customer->recurringInvoices()->exists()) { + foreach ($customer->recurringInvoices as $recurringInvoice) { + if ($recurringInvoice->items()->exists()) { + $recurringInvoice->items()->delete(); + } + + $recurringInvoice->delete(); + } + } + + $customer->delete(); + } + + return true; + } + + public static function createCustomer($request) + { + $customer = Customer::create($request->getCustomerPayload()); + + if ($request->shipping) { + if ($request->hasAddress($request->shipping)) { + $customer->addresses()->create($request->getShippingAddress()); + } + } + + if ($request->billing) { + if ($request->hasAddress($request->billing)) { + $customer->addresses()->create($request->getBillingAddress()); + } + } + + $customFields = $request->customFields; + + if ($customFields) { + $customer->addCustomFields($customFields); + } + + $customer = Customer::with('billingAddress', 'shippingAddress', 'fields')->find($customer->id); + + return $customer; + } + + public static function updateCustomer($request, $customer) + { + $condition = $customer->estimates()->exists() || $customer->invoices()->exists() || $customer->payments()->exists() || $customer->recurringInvoices()->exists(); + + if (($customer->currency_id !== $request->currency_id) && $condition) { + return 'you_cannot_edit_currency'; + } + + $customer->update($request->getCustomerPayload()); + + $customer->addresses()->delete(); + + if ($request->shipping) { + if ($request->hasAddress($request->shipping)) { + $customer->addresses()->create($request->getShippingAddress()); + } + } + + if ($request->billing) { + if ($request->hasAddress($request->billing)) { + $customer->addresses()->create($request->getBillingAddress()); + } + } + + $customFields = $request->customFields; + + if ($customFields) { + $customer->updateCustomFields($customFields); + } + + $customer = Customer::with('billingAddress', 'shippingAddress', 'fields')->find($customer->id); + + return $customer; + } + + public function scopePaginateData($query, $limit) + { + if ($limit == 'all') { + return $query->get(); + } + + return $query->paginate($limit); + } + + public function scopeWhereCompany($query) + { + return $query->where('customers.company_id', request()->header('company')); + } + + public function scopeWhereContactName($query, $contactName) + { + return $query->where('contact_name', 'LIKE', '%'.$contactName.'%'); + } + + public function scopeWhereDisplayName($query, $displayName) + { + return $query->where('name', 'LIKE', '%'.$displayName.'%'); + } + + public function scopeWhereOrder($query, $orderByField, $orderBy) + { + $query->orderBy($orderByField, $orderBy); + } + + public function scopeWhereSearch($query, $search) + { + foreach (explode(' ', $search) as $term) { + $query->where(function ($query) use ($term) { + $query->where('name', 'LIKE', '%'.$term.'%') + ->orWhere('email', 'LIKE', '%'.$term.'%') + ->orWhere('phone', 'LIKE', '%'.$term.'%'); + }); + } + } + + public function scopeWherePhone($query, $phone) + { + return $query->where('phone', 'LIKE', '%'.$phone.'%'); + } + + public function scopeWhereCustomer($query, $customer_id) + { + $query->orWhere('customers.id', $customer_id); + } + + public function scopeApplyInvoiceFilters($query, array $filters) + { + $filters = collect($filters); + + if ($filters->get('from_date') && $filters->get('to_date')) { + $start = Carbon::createFromFormat('Y-m-d', $filters->get('from_date')); + $end = Carbon::createFromFormat('Y-m-d', $filters->get('to_date')); + $query->invoicesBetween($start, $end); + } + } + + public function scopeInvoicesBetween($query, $start, $end) + { + $query->whereHas('invoices', function ($query) use ($start, $end) { + $query->whereBetween( + 'invoice_date', + [$start->format('Y-m-d'), $end->format('Y-m-d')] + ); + }); + } + + public function scopeApplyFilters($query, array $filters) + { + $filters = collect($filters); + + if ($filters->get('search')) { + $query->whereSearch($filters->get('search')); + } + + if ($filters->get('contact_name')) { + $query->whereContactName($filters->get('contact_name')); + } + + if ($filters->get('display_name')) { + $query->whereDisplayName($filters->get('display_name')); + } + + if ($filters->get('customer_id')) { + $query->whereCustomer($filters->get('customer_id')); + } + + if ($filters->get('phone')) { + $query->wherePhone($filters->get('phone')); + } + + if ($filters->get('orderByField') || $filters->get('orderBy')) { + $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'name'; + $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'asc'; + $query->whereOrder($field, $orderBy); + } + } +} diff --git a/app/Models/CustomerFactory.php b/app/Models/CustomerFactory.php new file mode 100644 index 000000000..e0e4f7bfe --- /dev/null +++ b/app/Models/CustomerFactory.php @@ -0,0 +1,40 @@ + $this->faker->name, + 'company_name' => $this->faker->company, + 'contact_name' => $this->faker->name, + 'website' => $this->faker->url, + 'enable_portal' => true, + 'email' => $this->faker->unique()->safeEmail, + 'phone' => $this->faker->phoneNumber, + 'company_id' => User::find(1)->companies()->first()->id, + 'password' => Hash::make('secret'), + 'currency_id' => Currency::find(1)->id, + ]; + } +} diff --git a/app/Models/Estimate.php b/app/Models/Estimate.php index ba8558e6a..deaf1aa84 100644 --- a/app/Models/Estimate.php +++ b/app/Models/Estimate.php @@ -6,11 +6,13 @@ use Barryvdh\DomPDF\Facade as PDF; use Carbon\Carbon; use Crater\Mail\SendEstimateMail; +use Crater\Services\SerialNumberFormatter; use Crater\Traits\GeneratesPdfTrait; use Crater\Traits\HasCustomFieldsTrait; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Str; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Vinkla\Hashids\Facades\Hashids; @@ -49,6 +51,7 @@ class Estimate extends Model implements HasMedia 'sub_total' => 'integer', 'discount' => 'float', 'discount_val' => 'integer', + 'exchange_rate' => 'float' ]; public function setEstimateDateAttribute($value) @@ -70,36 +73,6 @@ public function getEstimatePdfUrlAttribute() return url('/estimates/pdf/'.$this->unique_hash); } - public static function getNextEstimateNumber($value) - { - // Get the last created order - $lastOrder = Estimate::where('estimate_number', 'LIKE', $value.'-%') - ->orderBy('estimate_number', 'desc') - ->first(); - - // Get number length config - $numberLength = CompanySetting::getSetting('estimate_number_length', request()->header('company')); - $numberLengthText = "%0{$numberLength}d"; - - if (! $lastOrder) { - // We get here if there is no order at all - // If there is no number set it to 0, which will be 1 at the end. - $number = 0; - } else { - $number = explode("-", $lastOrder->estimate_number); - $number = $number[1]; - } - - // If we have ORD000001 in the database then we only want the number - // So the substr returns this 000001 - - // Add the string in front and higher up the number. - // the %05d part makes sure that there are always 6 numbers in the string. - // so it adds the missing zero's when needed. - - return sprintf($numberLengthText, intval($number) + 1); - } - public function emailLogs() { return $this->morphMany('App\Models\EmailLog', 'mailable'); @@ -110,9 +83,9 @@ public function items() return $this->hasMany('Crater\Models\EstimateItem'); } - public function user() + public function customer() { - return $this->belongsTo('Crater\Models\User', 'user_id'); + return $this->belongsTo(Customer::class, 'customer_id'); } public function creator() @@ -125,38 +98,14 @@ public function company() return $this->belongsTo('Crater\Models\Company'); } - public function taxes() + public function currency() { - return $this->hasMany(Tax::class); - } - - public function getEstimateNumAttribute() - { - $position = $this->strposX($this->estimate_number, "-", 1) + 1; - - return substr($this->estimate_number, $position); - } - - public function getEstimatePrefixAttribute() - { - $prefix = explode("-", $this->estimate_number)[0]; - - return $prefix; + return $this->belongsTo(Currency::class); } - private function strposX($haystack, $needle, $number) + public function taxes() { - if ($number == '1') { - return strpos($haystack, $needle); - } elseif ($number > '1') { - return strpos( - $haystack, - $needle, - $this->strposX($haystack, $needle, $number - 1) + strlen($needle) - ); - } else { - return error_log('Error: Value for parameter $number is out of range'); - } + return $this->hasMany(Tax::class); } public function getFormattedExpiryDateAttribute($value) @@ -188,7 +137,7 @@ public function scopeWhereStatus($query, $status) public function scopeWhereEstimateNumber($query, $estimateNumber) { - return $query->where('estimates.estimate_number', $estimateNumber); + return $query->where('estimates.estimate_number', 'LIKE', '%'.$estimateNumber.'%'); } public function scopeWhereEstimate($query, $estimate_id) @@ -199,7 +148,7 @@ public function scopeWhereEstimate($query, $estimate_id) public function scopeWhereSearch($query, $search) { foreach (explode(' ', $search) as $term) { - $query->whereHas('user', function ($query) use ($term) { + $query->whereHas('customer', function ($query) use ($term) { $query->where('name', 'LIKE', '%'.$term.'%') ->orWhere('contact_name', 'LIKE', '%'.$term.'%') ->orWhere('company_name', 'LIKE', '%'.$term.'%'); @@ -238,8 +187,8 @@ public function scopeApplyFilters($query, array $filters) } if ($filters->get('orderByField') || $filters->get('orderBy')) { - $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'estimate_number'; - $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'asc'; + $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'sequence_number'; + $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'desc'; $query->whereOrder($field, $orderBy); } } @@ -249,20 +198,20 @@ public function scopeWhereOrder($query, $orderByField, $orderBy) $query->orderBy($orderByField, $orderBy); } - public function scopeWhereCompany($query, $company_id) + public function scopeWhereCompany($query) { - $query->where('estimates.company_id', $company_id); + $query->where('estimates.company_id', request()->header('company')); } public function scopeWhereCustomer($query, $customer_id) { - $query->where('estimates.user_id', $customer_id); + $query->where('estimates.customer_id', $customer_id); } public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); @@ -270,22 +219,7 @@ public function scopePaginateData($query, $limit) public static function createEstimate($request) { - $data = $request->except(['items', 'taxes']); - - $data['creator_id'] = Auth::id(); - $data['status'] = self::STATUS_DRAFT; - $data['unique_hash'] = str_random(60); - $data['company_id'] = $request->header('company'); - - $data['tax_per_item'] = CompanySetting::getSetting( - 'tax_per_item', - $request->header('company') - ) ?? 'NO'; - - $data['discount_per_item'] = CompanySetting::getSetting( - 'discount_per_item', - $request->header('company') - ) ?? 'NO'; + $data = $request->getEstimatePayload(); if ($request->has('estimateSend')) { $data['status'] = self::STATUS_SENT; @@ -293,12 +227,26 @@ public static function createEstimate($request) $estimate = self::create($data); $estimate->unique_hash = Hashids::connection(Estimate::class)->encode($estimate->id); + $serial = (new SerialNumberFormatter()) + ->setModel($estimate) + ->setCompany($estimate->company_id) + ->setCustomer($estimate->customer_id) + ->setNextNumbers(); + + $estimate->sequence_number = $serial->nextSequenceNumber; + $estimate->customer_sequence_number = $serial->nextCustomerSequenceNumber; $estimate->save(); - self::createItems($estimate, $request); + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + + if ((string)$data['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($estimate); + } + + self::createItems($estimate, $request, $estimate->exchange_rate); if ($request->has('taxes') && (! empty($request->taxes))) { - self::createTaxes($estimate, $request); + self::createTaxes($estimate, $request, $estimate->exchange_rate); } $customFields = $request->customFields; @@ -307,27 +255,45 @@ public static function createEstimate($request) $estimate->addCustomFields($customFields); } - return Estimate::with([ - 'items.taxes', - 'user', - 'taxes' - ]) - ->find($estimate->id); + return $estimate; } public function updateEstimate($request) { - $data = $request->except(['items', 'taxes']); + $data = $request->getEstimatePayload(); + + $serial = (new SerialNumberFormatter()) + ->setModel($this) + ->setCompany($this->company_id) + ->setCustomer($request->customer_id) + ->setModelObject($this->id) + ->setNextNumbers(); + + $data['customer_sequence_number'] = $serial->nextCustomerSequenceNumber; $this->update($data); + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + + if ((string)$data['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($this); + } + + $this->items->map(function ($item) { + $fields = $item->fields()->get(); + + $fields->map(function ($field) { + $field->delete(); + }); + }); + $this->items()->delete(); $this->taxes()->delete(); - self::createItems($this, $request); + self::createItems($this, $request, $this->exchange_rate); if ($request->has('taxes') && (! empty($request->taxes))) { - self::createTaxes($this, $request); + self::createTaxes($this, $request, $this->exchange_rate); } if ($request->customFields) { @@ -336,18 +302,26 @@ public function updateEstimate($request) return Estimate::with([ 'items.taxes', - 'user', + 'items.fields', + 'items.fields.customField', + 'customer', 'taxes' ]) ->find($this->id); } - public static function createItems($estimate, $request) + public static function createItems($estimate, $request, $exchange_rate) { $estimateItems = $request->items; foreach ($estimateItems as $estimateItem) { $estimateItem['company_id'] = $request->header('company'); + $estimateItem['exchange_rate'] = $exchange_rate; + $estimateItem['base_price'] = $estimateItem['price'] * $exchange_rate; + $estimateItem['base_discount_val'] = $estimateItem['discount_val'] * $exchange_rate; + $estimateItem['base_tax'] = $estimate['tax'] * $exchange_rate; + $estimateItem['base_total'] = $estimateItem['total'] * $exchange_rate; + $item = $estimate->items()->create($estimateItem); if (array_key_exists('taxes', $estimateItem) && $estimateItem['taxes']) { @@ -358,38 +332,54 @@ public static function createItems($estimate, $request) } } } + + if (array_key_exists('custom_fields', $estimateItem) && $estimateItem['custom_fields']) { + $item->addCustomFields($estimateItem['custom_fields']); + } } } - public static function createTaxes($estimate, $request) + public static function createTaxes($estimate, $request, $exchange_rate) { $estimateTaxes = $request->taxes; foreach ($estimateTaxes as $tax) { if (gettype($tax['amount']) !== "NULL") { $tax['company_id'] = $request->header('company'); + $tax['exchange_rate'] = $exchange_rate; + $tax['base_amount'] = $tax['amount'] * $exchange_rate; + $tax['currency_id'] = $estimate->currency_id; + $estimate->taxes()->create($tax); } } } - public function send($data) + public function sendEstimateData($data) { $data['estimate'] = $this->toArray(); - $data['user'] = $this->user->toArray(); + $data['user'] = $this->customer->toArray(); $data['company'] = $this->company->toArray(); $data['body'] = $this->getEmailBody($data['body']); $data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null; - \Mail::to($data['to'])->send(new SendEstimateMail($data)); + return $data; + } + + public function send($data) + { + $data = $this->sendEstimateData($data); if ($this->status == Estimate::STATUS_DRAFT) { $this->status = Estimate::STATUS_SENT; $this->save(); } + \Mail::to($data['to'])->send(new SendEstimateMail($data)); + return [ 'success' => true, + 'type' => 'send', ]; } @@ -417,6 +407,7 @@ public function getPDFData() $company = Company::find($this->company_id); $locale = CompanySetting::getSetting('language', $company->id); + $customFields = CustomField::where('model_type', 'Item')->get(); App::setLocale($locale); @@ -424,6 +415,7 @@ public function getPDFData() view()->share([ 'estimate' => $this, + 'customFields' => $customFields, 'logo' => $logo ?? null, 'company_address' => $this->getCompanyAddress(), 'shipping_address' => $this->getCustomerShippingAddress(), @@ -448,7 +440,7 @@ public function getCompanyAddress() public function getCustomerShippingAddress() { - if ($this->user && (! $this->user->shippingAddress()->exists())) { + if ($this->customer && (! $this->customer->shippingAddress()->exists())) { return false; } @@ -459,7 +451,7 @@ public function getCustomerShippingAddress() public function getCustomerBillingAddress() { - if ($this->user && (! $this->user->billingAddress()->exists())) { + if ($this->customer && (! $this->customer->billingAddress()->exists())) { return false; } @@ -503,4 +495,54 @@ public function getExtraFields() '{ESTIMATE_LINK}' => url('/customer/estimates/pdf/'.$this->unique_hash), ]; } + + public static function estimateTemplates() + { + $templates = Storage::disk('views')->files('/app/pdf/estimate'); + $estimateTemplates = []; + + foreach ($templates as $key => $template) { + $templateName = Str::before(basename($template), '.blade.php'); + $estimateTemplates[$key]['name'] = $templateName; + $estimateTemplates[$key]['path'] = vite_asset('/img/PDF/'.$templateName.'.png'); + } + + return $estimateTemplates; + } + + public function getInvoiceTemplateName() + { + $templateName = Str::replace('estimate', 'invoice', $this->template_name); + + $name = []; + + foreach (Invoice::invoiceTemplates() as $template) { + $name[] = $template['name']; + } + + if (in_array($templateName, $name) == false) { + $templateName = 'invoice1'; + } + + return $templateName; + } + + public function checkForEstimateConvertAction() + { + $convertEstimateAction = CompanySetting::getSetting( + 'estimate_convert_action', + $this->company_id + ); + + if ($convertEstimateAction === 'delete_estimate') { + $this->delete(); + } + + if ($convertEstimateAction === 'mark_estimate_as_accepted') { + $this->status = self::STATUS_ACCEPTED; + $this->save(); + } + + return true; + } } diff --git a/app/Models/EstimateItem.php b/app/Models/EstimateItem.php index 75c2419ef..d38a2b625 100644 --- a/app/Models/EstimateItem.php +++ b/app/Models/EstimateItem.php @@ -2,27 +2,17 @@ namespace Crater\Models; +use Crater\Traits\HasCustomFieldsTrait; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class EstimateItem extends Model { use HasFactory; + use HasCustomFieldsTrait; - protected $fillable = [ - 'estimate_id', - 'name', - 'item_id', - 'description', - 'quantity', - 'company_id', - 'price', - 'discount_type', - 'discount_val', - 'tax', - 'total', - 'discount', - 'unit_name', + protected $guarded = [ + 'id' ]; protected $casts = [ diff --git a/app/Models/ExchangeRateLog.php b/app/Models/ExchangeRateLog.php new file mode 100644 index 000000000..72a963925 --- /dev/null +++ b/app/Models/ExchangeRateLog.php @@ -0,0 +1,41 @@ + 'float' + ]; + + public function currency() + { + return $this->belongsTo(Currency::class); + } + + public function company() + { + return $this->belongsTo(Company::class); + } + + public static function addExchangeRateLog($model) + { + $data = [ + 'exchange_rate' => $model->exchange_rate, + 'company_id' => $model->company_id, + 'base_currency_id' => $model->currency_id, + 'currency_id' => CompanySetting::getSetting('currency', $model->company_id), + ]; + + return self::create($data); + } +} diff --git a/app/Models/ExchangeRateProvider.php b/app/Models/ExchangeRateProvider.php new file mode 100644 index 000000000..d02ae51d0 --- /dev/null +++ b/app/Models/ExchangeRateProvider.php @@ -0,0 +1,166 @@ + 'array', + 'driver_config' => 'array', + 'active' => 'boolean' + ]; + + public function company() + { + return $this->belongsTo(Company::class); + } + + public function setCurrenciesAttribute($value) + { + $this->attributes['currencies'] = json_encode($value); + } + + public function setDriverConfigAttribute($value) + { + $this->attributes['driver_config'] = json_encode($value); + } + + public function scopeWhereCompany($query) + { + $query->where('exchange_rate_providers.company_id', request()->header('company')); + } + + public static function createFromRequest(ExchangeRateProviderRequest $request) + { + $exchangeRateProvider = self::create($request->getExchangeRateProviderPayload()); + + return $exchangeRateProvider; + } + + public function updateFromRequest(ExchangeRateProviderRequest $request) + { + $this->update($request->getExchangeRateProviderPayload()); + + return $this; + } + + public static function checkActiveCurrencies($request) + { + $query = ExchangeRateProvider::whereJsonContains('currencies', $request->currencies) + ->where('active', true) + ->get(); + + return $query; + } + + public function checkUpdateActiveCurrencies($request) + { + $query = ExchangeRateProvider::where('active', $request->active) + ->where('id', '<>', $this->id) + ->whereJsonContains('currencies', $request->currencies) + ->get(); + + return $query; + } + + public static function checkExchangeRateProviderStatus($request) + { + switch ($request['driver']) { + case 'currency_freak': + $url = "https://api.currencyfreaks.com/latest?apikey=".$request['key']."&symbols=INR&base=USD"; + $response = Http::get($url)->json(); + + if (array_key_exists('success', $response)) { + if ($response["success"] == false) { + return respondJson($response["error"]["message"], $response["error"]["message"]); + } + } + + return response()->json([ + 'exchangeRate' => array_values($response["rates"]), + ], 200); + + break; + + case 'currency_layer': + $url = "http://api.currencylayer.com/live?access_key=".$request['key']."&source=INR¤cies=USD"; + $response = Http::get($url)->json(); + + if (array_key_exists('success', $response)) { + if ($response["success"] == false) { + return respondJson($response["error"]["info"], $response["error"]["info"]); + } + } + + return response()->json([ + 'exchangeRate' => array_values($response['quotes']), + ], 200); + + break; + + case 'open_exchange_rate': + $url = "https://openexchangerates.org/api/latest.json?app_id=".$request['key']."&base=INR&symbols=USD"; + $response = Http::get($url)->json(); + + if (array_key_exists("error", $response)) { + return respondJson($response['message'], $response["description"]); + } + + return response()->json([ + 'exchangeRate' => array_values($response["rates"]), + ], 200); + + break; + + case 'currency_converter': + $url = self::getCurrencyConverterUrl($request['driver_config']); + $url = $url."/api/v7/convert?apiKey=".$request['key']; + + $query = "INR_USD"; + $url = $url."&q={$query}"."&compact=y"; + $response = Http::get($url)->json(); + + return response()->json([ + 'exchangeRate' => array_values($response[$query]), + ], 200); + + break; + } + } + + public static function getCurrencyConverterUrl($data) + { + switch ($data['type']) { + case 'PREMIUM': + return "https://api.currconv.com"; + + break; + + case 'PREPAID': + return "https://prepaid.currconv.com"; + + break; + + case 'FREE': + return "https://free.currconv.com"; + + break; + + case 'DEDICATED': + return $data['url']; + + break; + } + } +} diff --git a/app/Models/Expense.php b/app/Models/Expense.php index 752c245cb..dcb3dc998 100644 --- a/app/Models/Expense.php +++ b/app/Models/Expense.php @@ -6,7 +6,6 @@ use Crater\Traits\HasCustomFieldsTrait; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; @@ -23,6 +22,12 @@ class Expense extends Model implements HasMedia 'formattedExpenseDate', 'formattedCreatedAt', 'receipt', + 'receiptMeta' + ]; + + protected $casts = [ + 'notes' => 'string', + 'exchange_rate' => 'float' ]; public function setExpenseDateAttribute($value) @@ -37,9 +42,24 @@ public function category() return $this->belongsTo(ExpenseCategory::class, 'expense_category_id'); } - public function user() + public function customer() + { + return $this->belongsTo(Customer::class, 'customer_id'); + } + + public function company() + { + return $this->belongsTo(Company::class, 'company_id'); + } + + public function paymentMethod() + { + return $this->belongsTo(PaymentMethod::class); + } + + public function currency() { - return $this->belongsTo(User::class, 'user_id'); + return $this->belongsTo(Currency::class, 'currency_id'); } public function creator() @@ -61,9 +81,24 @@ public function getFormattedCreatedAtAttribute($value) return Carbon::parse($this->created_at)->format($dateFormat); } + public function getReceiptUrlAttribute($value) + { + $media = $this->getFirstMedia('receipts'); + + if ($media) { + return [ + 'url' => $media->getFullUrl(), + 'type' => $media->type + ]; + } + + return null; + } + public function getReceiptAttribute($value) { $media = $this->getFirstMedia('receipts'); + if ($media) { return $media->getPath(); } @@ -71,6 +106,17 @@ public function getReceiptAttribute($value) return null; } + public function getReceiptMetaAttribute($value) + { + $media = $this->getFirstMedia('receipts'); + + if ($media) { + return $media; + } + + return null; + } + public function scopeExpensesBetween($query, $start, $end) { return $query->whereBetween( @@ -98,9 +144,9 @@ public function scopeWhereCategory($query, $categoryId) return $query->where('expenses.expense_category_id', $categoryId); } - public function scopeWhereUser($query, $user_id) + public function scopeWhereUser($query, $customer_id) { - return $query->where('expenses.user_id', $user_id); + return $query->where('expenses.customer_id', $customer_id); } public function scopeApplyFilters($query, array $filters) @@ -111,8 +157,8 @@ public function scopeApplyFilters($query, array $filters) $query->whereCategory($filters->get('expense_category_id')); } - if ($filters->get('user_id')) { - $query->whereUser($filters->get('user_id')); + if ($filters->get('customer_id')) { + $query->whereUser($filters->get('customer_id')); } if ($filters->get('expense_id')) { @@ -156,15 +202,20 @@ public function scopeWhereOrder($query, $orderByField, $orderBy) $query->orderBy($orderByField, $orderBy); } - public function scopeWhereCompany($query, $company_id) + public function scopeWhereCompany($query) + { + $query->where('expenses.company_id', request()->header('company')); + } + + public function scopeWhereCompanyId($query, $company) { - $query->where('expenses.company_id', $company_id); + $query->where('expenses.company_id', $company); } public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); @@ -183,20 +234,20 @@ public function scopeExpensesAttributes($query) public static function createExpense($request) { - $data = $request->validated(); - $data['creator_id'] = Auth::id(); - $data['company_id'] = $request->header('company'); + $expense = self::create($request->getExpensePayload()); - $expense = self::create($data); + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); - if ($request->hasFile('attachment_receipt')) { - $expense->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts', 'local'); + if ((string)$expense['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($expense); } - $customFields = json_decode($request->customFields, true); + if ($request->hasFile('attachment_receipt')) { + $expense->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts'); + } - if ($customFields) { - $expense->addCustomFields($customFields); + if ($request->customFields && empty($request->customFields)) { + $expense->addCustomFields($request->customFields); } return $expense; @@ -204,17 +255,23 @@ public static function createExpense($request) public function updateExpense($request) { - $this->update($request->validated()); + $data = $request->getExpensePayload(); + + $this->update($data); + + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + + if ((string)$data['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($this); + } if ($request->hasFile('attachment_receipt')) { $this->clearMediaCollection('receipts'); - $this->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts', 'local'); + $this->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts'); } - $customFields = json_decode($request->customFields, true); - - if ($customFields) { - $this->updateCustomFields($customFields); + if ($request->customFields && empty($request->customFields)) { + $this->updateCustomFields($request->customFields); } return true; diff --git a/app/Models/ExpenseCategory.php b/app/Models/ExpenseCategory.php index 2d938e3a8..71dca9bbf 100644 --- a/app/Models/ExpenseCategory.php +++ b/app/Models/ExpenseCategory.php @@ -24,6 +24,11 @@ public function expenses() return $this->hasMany(Expense::class); } + public function company() + { + return $this->belongsTo(Company::class); + } + public function getFormattedCreatedAtAttribute($value) { $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); @@ -36,9 +41,9 @@ public function getAmountAttribute() return $this->expenses()->sum('amount'); } - public function scopeWhereCompany($query, $company_id) + public function scopeWhereCompany($query) { - $query->where('company_id', $company_id); + $query->where('company_id', request()->header('company')); } public function scopeWhereCategory($query, $category_id) @@ -71,7 +76,7 @@ public function scopeApplyFilters($query, array $filters) public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); diff --git a/app/Models/FileDisk.php b/app/Models/FileDisk.php index dbef43619..a435bf7af 100644 --- a/app/Models/FileDisk.php +++ b/app/Models/FileDisk.php @@ -16,6 +16,10 @@ class FileDisk extends Model 'id', ]; + protected $casts = [ + 'set_as_default' => 'boolean', + ]; + public function setCredentialsAttribute($value) { $this->attributes['credentials'] = json_encode($value); @@ -45,7 +49,7 @@ public function scopeWhereSearch($query, $search) public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); @@ -65,7 +69,7 @@ public function scopeApplyFilters($query, array $filters) } if ($filters->get('orderByField') || $filters->get('orderBy')) { - $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'invoice_number'; + $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'sequence_number'; $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'asc'; $query->whereOrder($field, $orderBy); } @@ -139,6 +143,7 @@ public static function createDisk($request) 'name' => $request->name, 'driver' => $request->driver, 'set_as_default' => $request->set_as_default, + 'company_id' => $request->header('company'), ]); return $disk; diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index ac3007981..5dec7b61f 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -6,11 +6,13 @@ use Barryvdh\DomPDF\Facade as PDF; use Carbon\Carbon; use Crater\Mail\SendInvoiceMail; +use Crater\Services\SerialNumberFormatter; use Crater\Traits\GeneratesPdfTrait; use Crater\Traits\HasCustomFieldsTrait; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Str; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Vinkla\Hashids\Facades\Hashids; @@ -45,6 +47,7 @@ class Invoice extends Model implements HasMedia 'sub_total' => 'integer', 'discount' => 'float', 'discount_val' => 'integer', + 'exchange_rate' => 'float' ]; protected $guarded = [ @@ -72,35 +75,6 @@ public function setDueDateAttribute($value) } } - public static function getNextInvoiceNumber($value) - { - // Get the last created order - $lastOrder = Invoice::where('invoice_number', 'LIKE', $value.'-%') - ->orderBy('invoice_number', 'desc') - ->first(); - - // Get number length config - $numberLength = CompanySetting::getSetting('invoice_number_length', request()->header('company')); - $numberLengthText = "%0{$numberLength}d"; - - if (! $lastOrder) { - // We get here if there is no order at all - // If there is no number set it to 0, which will be 1 at the end. - $number = 0; - } else { - $number = explode("-", $lastOrder->invoice_number); - $number = $number[1]; - } - // If we have ORD000001 in the database then we only want the number - // So the substr returns this 000001 - - // Add the string in front and higher up the number. - // the %06d part makes sure that there are always 6 numbers in the string. - // so it adds the missing zero's when needed. - - return sprintf($numberLengthText, intval($number) + 1); - } - public function emailLogs() { return $this->morphMany('App\Models\EmailLog', 'mailable'); @@ -131,14 +105,19 @@ public function company() return $this->belongsTo(Company::class); } - public function user() + public function customer() + { + return $this->belongsTo(Customer::class, 'customer_id'); + } + + public function recurringInvoice() { - return $this->belongsTo('Crater\Models\User', 'user_id'); + return $this->belongsTo(RecurringInvoice::class); } public function creator() { - return $this->belongsTo('Crater\Models\User', 'creator_id'); + return $this->belongsTo(User::class, 'creator_id'); } public function getInvoicePdfUrlAttribute() @@ -146,6 +125,31 @@ public function getInvoicePdfUrlAttribute() return url('/invoices/pdf/'.$this->unique_hash); } + public function getAllowEditAttribute() + { + $retrospective_edit = CompanySetting::getSetting('retrospective_edits', $this->company_id); + + $allowed = true; + + $status = [ + self::STATUS_DRAFT, + self::STATUS_SENT, + self::STATUS_VIEWED, + self::STATUS_OVERDUE, + self::STATUS_COMPLETED, + ]; + + if ($retrospective_edit == 'disable_on_invoice_sent' && (in_array($this->status, $status)) && ($this->paid_status === Invoice::STATUS_PARTIALLY_PAID || $this->paid_status === Invoice::STATUS_PAID)) { + $allowed = false; + } elseif ($retrospective_edit == 'disable_on_invoice_partial_paid' && ($this->paid_status === Invoice::STATUS_PARTIALLY_PAID || $this->paid_status === Invoice::STATUS_PAID)) { + $allowed = false; + } elseif ($retrospective_edit == 'disable_on_invoice_paid' && $this->paid_status === Invoice::STATUS_PAID) { + $allowed = false; + } + + return $allowed; + } + public function getPreviousStatus() { if ($this->due_date < Carbon::now()) { @@ -159,35 +163,6 @@ public function getPreviousStatus() } } - private function strposX($haystack, $needle, $number) - { - if ($number == '1') { - return strpos($haystack, $needle); - } elseif ($number > '1') { - return strpos( - $haystack, - $needle, - $this->strposX($haystack, $needle, $number - 1) + strlen($needle) - ); - } else { - return error_log('Error: Value for parameter $number is out of range'); - } - } - - public function getInvoiceNumAttribute() - { - $position = $this->strposX($this->invoice_number, "-", 1) + 1; - - return substr($this->invoice_number, $position); - } - - public function getInvoicePrefixAttribute() - { - $prefix = explode("-", $this->invoice_number)[0]; - - return $prefix; - } - public function getFormattedCreatedAtAttribute($value) { $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); @@ -243,7 +218,7 @@ public function scopeInvoicesBetween($query, $start, $end) public function scopeWhereSearch($query, $search) { foreach (explode(' ', $search) as $term) { - $query->whereHas('user', function ($query) use ($term) { + $query->whereHas('customer', function ($query) use ($term) { $query->where('name', 'LIKE', '%'.$term.'%') ->orWhere('contact_name', 'LIKE', '%'.$term.'%') ->orWhere('company_name', 'LIKE', '%'.$term.'%'); @@ -259,6 +234,7 @@ public function scopeWhereOrder($query, $orderByField, $orderBy) public function scopeApplyFilters($query, array $filters) { $filters = collect($filters); + if ($filters->get('search')) { $query->whereSearch($filters->get('search')); } @@ -300,8 +276,8 @@ public function scopeApplyFilters($query, array $filters) } if ($filters->get('orderByField') || $filters->get('orderBy')) { - $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'invoice_number'; - $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'asc'; + $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'sequence_number'; + $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'desc'; $query->whereOrder($field, $orderBy); } } @@ -311,20 +287,25 @@ public function scopeWhereInvoice($query, $invoice_id) $query->orWhere('id', $invoice_id); } - public function scopeWhereCompany($query, $company_id) + public function scopeWhereCompany($query) + { + $query->where('invoices.company_id', request()->header('company')); + } + + public function scopeWhereCompanyId($query, $company) { - $query->where('invoices.company_id', $company_id); + $query->where('invoices.company_id', $company); } public function scopeWhereCustomer($query, $customer_id) { - $query->where('invoices.user_id', $customer_id); + $query->where('invoices.customer_id', $customer_id); } public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); @@ -332,28 +313,35 @@ public function scopePaginateData($query, $limit) public static function createInvoice($request) { - $data = $request->except('items', 'taxes'); - - $data['creator_id'] = Auth::id(); - $data['status'] = Invoice::STATUS_DRAFT; - $data['company_id'] = $request->header('company'); - $data['paid_status'] = Invoice::STATUS_UNPAID; - $data['tax_per_item'] = CompanySetting::getSetting('tax_per_item', $request->header('company')) ?? 'NO '; - $data['discount_per_item'] = CompanySetting::getSetting('discount_per_item', $request->header('company')) ?? 'NO'; - $data['due_amount'] = $request->total; + $data = $request->getInvoicePayload(); if ($request->has('invoiceSend')) { $data['status'] = Invoice::STATUS_SENT; } $invoice = Invoice::create($data); + + $serial = (new SerialNumberFormatter()) + ->setModel($invoice) + ->setCompany($invoice->company_id) + ->setCustomer($invoice->customer_id) + ->setNextNumbers(); + + $invoice->sequence_number = $serial->nextSequenceNumber; + $invoice->customer_sequence_number = $serial->nextCustomerSequenceNumber; $invoice->unique_hash = Hashids::connection(Invoice::class)->encode($invoice->id); $invoice->save(); - self::createItems($invoice, $request); + self::createItems($invoice, $request->items); + + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + + if ((string)$data['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($invoice); + } if ($request->has('taxes') && (! empty($request->taxes))) { - self::createTaxes($invoice, $request); + self::createTaxes($invoice, $request->taxes); } if ($request->customFields) { @@ -361,10 +349,12 @@ public static function createInvoice($request) } $invoice = Invoice::with([ - 'items', - 'user', - 'taxes' - ]) + 'items', + 'items.fields', + 'items.fields.customField', + 'customer', + 'taxes' + ]) ->find($invoice->id); return $invoice; @@ -372,39 +362,60 @@ public static function createInvoice($request) public function updateInvoice($request) { - $data = $request->except('items'); - $oldAmount = $this->total; + $serial = (new SerialNumberFormatter()) + ->setModel($this) + ->setCompany($this->company_id) + ->setCustomer($request->customer_id) + ->setModelObject($this->id) + ->setNextNumbers(); - if ($oldAmount != $request->total) { - $oldAmount = (int) round($request->total) - (int) $oldAmount; - } else { - $oldAmount = 0; + $data = $request->getInvoicePayload(); + $oldTotal = $this->total; + + $total_paid_amount = $this->total - $this->due_amount; + + if ($total_paid_amount > 0 && $this->customer_id !== $request->customer_id) { + return 'customer_cannot_be_changed_after_payment_is_added'; } - $data['due_amount'] = ($this->due_amount + $oldAmount); + if ($request->total < $total_paid_amount) { + return 'total_invoice_amount_must_be_more_than_paid_amount'; + } - if ($data['due_amount'] == 0 && $this->paid_status != Invoice::STATUS_PAID) { - $data['status'] = Invoice::STATUS_COMPLETED; - $data['paid_status'] = Invoice::STATUS_PAID; - } elseif ($this->due_amount < 0 && $this->paid_status != Invoice::STATUS_UNPAID) { - return response()->json([ - 'error' => 'invalid_due_amount', - ]); - } elseif ($data['due_amount'] != 0 && $this->paid_status == Invoice::STATUS_PAID) { - $data['status'] = $this->getPreviousStatus(); - $data['paid_status'] = Invoice::STATUS_PARTIALLY_PAID; + if ($oldTotal != $request->total) { + $oldTotal = (int) round($request->total) - (int) $oldTotal; + } else { + $oldTotal = 0; } + $data['due_amount'] = ($this->due_amount + $oldTotal); + $data['customer_sequence_number'] = $serial->nextCustomerSequenceNumber; + + $this->changeInvoiceStatus($data['due_amount']); + $this->update($data); + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + + if ((string)$data['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($this); + } + + $this->items->map(function ($item) { + $fields = $item->fields()->get(); + + $fields->map(function ($field) { + $field->delete(); + }); + }); $this->items()->delete(); $this->taxes()->delete(); - self::createItems($this, $request); + self::createItems($this, $request->items); if ($request->has('taxes') && (! empty($request->taxes))) { - self::createTaxes($this, $request); + self::createTaxes($this, $request->taxes); } if ($request->customFields) { @@ -412,23 +423,42 @@ public function updateInvoice($request) } $invoice = Invoice::with([ - 'items', - 'user', - 'taxes' - ]) + 'items', + 'items.fields', + 'items.fields.customField', + 'customer', + 'taxes' + ]) ->find($this->id); return $invoice; } - public function send($data) + public function sendInvoiceData($data) { $data['invoice'] = $this->toArray(); - $data['user'] = $this->user->toArray(); + $data['customer'] = $this->customer->toArray(); $data['company'] = Company::find($this->company_id); $data['body'] = $this->getEmailBody($data['body']); $data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null; + return $data; + } + + public function preview($data) + { + $data = $this->sendInvoiceData($data); + + return [ + 'type' => 'preview', + 'view' => new SendInvoiceMail($data) + ]; + } + + public function send($data) + { + $data = $this->sendInvoiceData($data); + if ($this->status == Invoice::STATUS_DRAFT) { $this->status = Invoice::STATUS_SENT; $this->sent = true; @@ -439,37 +469,63 @@ public function send($data) return [ 'success' => true, + 'type' => 'send', ]; } - public static function createItems($invoice, $request) + public static function createItems($invoice, $invoiceItems) { - $invoiceItems = $request->items; + $exchange_rate = $invoice->exchange_rate; foreach ($invoiceItems as $invoiceItem) { - $invoiceItem['company_id'] = $request->header('company'); + $invoiceItem['company_id'] = $invoice->company_id; + $invoiceItem['exchange_rate'] = $exchange_rate; + $invoiceItem['base_price'] = $invoiceItem['price'] * $exchange_rate; + $invoiceItem['base_discount_val'] = $invoiceItem['discount_val'] * $exchange_rate; + $invoiceItem['base_tax'] = $invoiceItem['tax'] * $exchange_rate; + $invoiceItem['base_total'] = $invoiceItem['total'] * $exchange_rate; + + if (array_key_exists('recurring_invoice_id', $invoiceItem)) { + unset($invoiceItem['recurring_invoice_id']); + } + $item = $invoice->items()->create($invoiceItem); if (array_key_exists('taxes', $invoiceItem) && $invoiceItem['taxes']) { foreach ($invoiceItem['taxes'] as $tax) { - $tax['company_id'] = $request->header('company'); + $tax['company_id'] = $invoice->company_id; if (gettype($tax['amount']) !== "NULL") { + if (array_key_exists('recurring_invoice_id', $invoiceItem)) { + unset($invoiceItem['recurring_invoice_id']); + } + $item->taxes()->create($tax); } } } + + if (array_key_exists('custom_fields', $invoiceItem) && $invoiceItem['custom_fields']) { + $item->addCustomFields($invoiceItem['custom_fields']); + } } } - public static function createTaxes($invoice, $request) + public static function createTaxes($invoice, $taxes) { - if ($request->has('taxes') && (! empty($request->taxes))) { - foreach ($request->taxes as $tax) { - $tax['company_id'] = $request->header('company'); + $exchange_rate = $invoice->exchange_rate; - if (gettype($tax['amount']) !== "NULL") { - $invoice->taxes()->create($tax); + foreach ($taxes as $tax) { + $tax['company_id'] = $invoice->company_id; + $tax['exchnage_rate'] = $invoice->exchange_rate; + $tax['base_amount'] = $tax['amount'] * $exchange_rate; + $tax['currency_id'] = $invoice->currency_id; + + if (gettype($tax['amount']) !== "NULL") { + if (array_key_exists('recurring_invoice_id', $tax)) { + unset($tax['recurring_invoice_id']); } + + $invoice->taxes()->create($tax); } } } @@ -498,6 +554,7 @@ public function getPDFData() $company = Company::find($this->company_id); $locale = CompanySetting::getSetting('language', $company->id); + $customFields = CustomField::where('model_type', 'Item')->get(); App::setLocale($locale); @@ -505,6 +562,7 @@ public function getPDFData() view()->share([ 'invoice' => $this, + 'customFields' => $customFields, 'company_address' => $this->getCompanyAddress(), 'shipping_address' => $this->getCustomerShippingAddress(), 'billing_address' => $this->getCustomerBillingAddress(), @@ -540,7 +598,7 @@ public function getCompanyAddress() public function getCustomerShippingAddress() { - if ($this->user && (! $this->user->shippingAddress()->exists())) { + if ($this->customer && (! $this->customer->shippingAddress()->exists())) { return false; } @@ -551,7 +609,7 @@ public function getCustomerShippingAddress() public function getCustomerBillingAddress() { - if ($this->user && (! $this->user->billingAddress()->exists())) { + if ($this->customer && (! $this->customer->billingAddress()->exists())) { return false; } @@ -584,4 +642,54 @@ public function getExtraFields() '{INVOICE_LINK}' => url('/customer/invoices/pdf/'.$this->unique_hash), ]; } + + public static function invoiceTemplates() + { + $templates = Storage::disk('views')->files('/app/pdf/invoice'); + $invoiceTemplates = []; + + foreach ($templates as $key => $template) { + $templateName = Str::before(basename($template), '.blade.php'); + $invoiceTemplates[$key]['name'] = $templateName; + $invoiceTemplates[$key]['path'] = vite_asset('img/PDF/'.$templateName.'.png'); + } + + return $invoiceTemplates; + } + + public function addInvoicePayment($amount) + { + $this->due_amount += $amount; + + $this->changeInvoiceStatus($this->due_amount); + } + + public function subtractInvoicePayment($amount) + { + $this->due_amount -= $amount; + + $this->changeInvoiceStatus($this->due_amount); + } + + public function changeInvoiceStatus($amount) + { + if ($amount < 0) { + return [ + 'error' => 'invalid_amount', + ]; + } + + if ($amount == 0) { + $this->status = Invoice::STATUS_COMPLETED; + $this->paid_status = Invoice::STATUS_PAID; + } elseif ($amount == $this->total) { + $this->status = $this->getPreviousStatus(); + $this->paid_status = Invoice::STATUS_UNPAID; + } else { + $this->status = $this->getPreviousStatus(); + $this->paid_status = Invoice::STATUS_PARTIALLY_PAID; + } + + $this->save(); + } } diff --git a/app/Models/InvoiceItem.php b/app/Models/InvoiceItem.php index a8ea8b0cb..63dc3ca43 100644 --- a/app/Models/InvoiceItem.php +++ b/app/Models/InvoiceItem.php @@ -3,6 +3,7 @@ namespace Crater\Models; use Carbon\Carbon; +use Crater\Traits\HasCustomFieldsTrait; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; @@ -10,21 +11,10 @@ class InvoiceItem extends Model { use HasFactory; + use HasCustomFieldsTrait; - protected $fillable = [ - 'invoice_id', - 'name', - 'item_id', - 'description', - 'company_id', - 'quantity', - 'price', - 'discount_type', - 'discount_val', - 'total', - 'tax', - 'discount', - 'unit_name', + protected $guarded = [ + 'id' ]; protected $casts = [ @@ -51,6 +41,11 @@ public function taxes() return $this->hasMany(Tax::class); } + public function recurringInvoice() + { + return $this->belongsTo(RecurringInvoice::class); + } + public function scopeWhereCompany($query, $company_id) { $query->where('company_id', $company_id); diff --git a/app/Models/Item.php b/app/Models/Item.php index e2afbe9c6..db1163f7b 100644 --- a/app/Models/Item.php +++ b/app/Models/Item.php @@ -23,7 +23,12 @@ class Item extends Model public function unit() { - return $this->belongsTo(Unit::class); + return $this->belongsTo(Unit::class, 'unit_id'); + } + + public function company() + { + return $this->belongsTo(Company::class); } public function creator() @@ -31,6 +36,11 @@ public function creator() return $this->belongsTo('Crater\Models\User', 'creator_id'); } + public function currency() + { + return $this->belongsTo(Currency::class); + } + public function scopeWhereSearch($query, $search) { return $query->where('items.name', 'LIKE', '%'.$search.'%'); @@ -86,7 +96,7 @@ public function scopeApplyFilters($query, array $filters) public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); @@ -94,7 +104,7 @@ public function scopePaginateData($query, $limit) public function getFormattedCreatedAtAttribute($value) { - $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); + $dateFormat = CompanySetting::getSetting('carbon_date_format', request()->header('company')); return Carbon::parse($this->created_at)->format($dateFormat); } @@ -106,9 +116,9 @@ public function taxes() ->where('estimate_item_id', null); } - public function scopeWhereCompany($query, $company_id) + public function scopeWhereCompany($query) { - $query->where('items.company_id', $company_id); + $query->where('items.company_id', request()->header('company')); } public function invoiceItems() @@ -126,10 +136,14 @@ public static function createItem($request) $data = $request->validated(); $data['company_id'] = $request->header('company'); $data['creator_id'] = Auth::id(); + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + $data['currency_id'] = $company_currency; $item = self::create($data); if ($request->has('taxes')) { foreach ($request->taxes as $tax) { + $item->tax_per_item = true; + $item->save(); $tax['company_id'] = $request->header('company'); $item->taxes()->create($tax); } @@ -148,6 +162,8 @@ public function updateItem($request) if ($request->has('taxes')) { foreach ($request->taxes as $tax) { + $this->tax_per_item = true; + $this->save(); $tax['company_id'] = $request->header('company'); $this->taxes()->create($tax); } diff --git a/app/Models/Note.php b/app/Models/Note.php index b618ab3c2..9dad4b849 100644 --- a/app/Models/Note.php +++ b/app/Models/Note.php @@ -11,6 +11,11 @@ class Note extends Model protected $guarded = ['id']; + public function company() + { + return $this->belongsTo(Company::class); + } + public function scopeApplyFilters($query, array $filters) { $filters = collect($filters); @@ -33,4 +38,9 @@ public function scopeWhereType($query, $type) { return $query->where('type', $type); } + + public function scopeWhereCompany($query) + { + $query->where('notes.company_id', request()->header('company')); + } } diff --git a/app/Models/Payment.php b/app/Models/Payment.php index 293262215..a3c572ad8 100644 --- a/app/Models/Payment.php +++ b/app/Models/Payment.php @@ -6,11 +6,11 @@ use Carbon\Carbon; use Crater\Jobs\GeneratePaymentPdfJob; use Crater\Mail\SendPaymentMail; +use Crater\Services\SerialNumberFormatter; use Crater\Traits\GeneratesPdfTrait; use Crater\Traits\HasCustomFieldsTrait; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Facades\Auth; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Vinkla\Hashids\Facades\Hashids; @@ -38,6 +38,11 @@ class Payment extends Model implements HasMedia 'paymentPdfUrl', ]; + protected $casts = [ + 'notes' => 'string', + 'exchange_rate' => 'float' + ]; + protected static function booted() { static::created(function ($payment) { @@ -56,13 +61,6 @@ public function setPaymentDateAttribute($value) } } - public function getPaymentPrefixAttribute() - { - $prefix = explode("-", $this->payment_number)[0]; - - return $prefix; - } - public function getFormattedCreatedAtAttribute($value) { $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); @@ -82,16 +80,14 @@ public function getPaymentPdfUrlAttribute() return url('/payments/pdf/'.$this->unique_hash); } - public function getPaymentNumAttribute() + public function emailLogs() { - $position = $this->strposX($this->payment_number, "-", 1) + 1; - - return substr($this->payment_number, $position); + return $this->morphMany('App\Models\EmailLog', 'mailable'); } - public function emailLogs() + public function customer() { - return $this->morphMany('App\Models\EmailLog', 'mailable'); + return $this->belongsTo(Customer::class, 'customer_id'); } public function company() @@ -104,14 +100,14 @@ public function invoice() return $this->belongsTo(Invoice::class); } - public function user() + public function creator() { - return $this->belongsTo(User::class, 'user_id'); + return $this->belongsTo('Crater\Models\User', 'creator_id'); } - public function creator() + public function currency() { - return $this->belongsTo('Crater\Models\User', 'creator_id'); + return $this->belongsTo(Currency::class); } public function paymentMethod() @@ -119,14 +115,21 @@ public function paymentMethod() return $this->belongsTo(PaymentMethod::class); } - public function send($data) + public function sendPaymentData($data) { $data['payment'] = $this->toArray(); - $data['user'] = $this->user->toArray(); + $data['user'] = $this->customer->toArray(); $data['company'] = Company::find($this->company_id); $data['body'] = $this->getEmailBody($data['body']); $data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null; + return $data; + } + + public function send($data) + { + $data = $this->sendPaymentData($data); + \Mail::to($data['to'])->send(new SendPaymentMail($data)); return [ @@ -136,36 +139,32 @@ public function send($data) public static function createPayment($request) { - $data = $request->validated(); + $data = $request->getPaymentPayload(); - $data['company_id'] = $request->header('company'); - $data['creator_id'] = Auth::id(); - - if ($request->has('invoice_id') && $request->invoice_id != null) { + if ($request->invoice_id) { $invoice = Invoice::find($request->invoice_id); - if ($invoice && $invoice->due_amount == $request->amount) { - $invoice->status = Invoice::STATUS_COMPLETED; - $invoice->paid_status = Invoice::STATUS_PAID; - $invoice->due_amount = 0; - } elseif ($invoice && $invoice->due_amount != $request->amount) { - $invoice->due_amount = (int)$invoice->due_amount - (int)$request->amount; - if ($invoice->due_amount < 0) { - return [ - 'error' => 'invalid_amount', - ]; - } - $invoice->paid_status = Invoice::STATUS_PARTIALLY_PAID; - } - $invoice->save(); + $invoice->subtractInvoicePayment($request->amount); } - $payment = Payment::create($data); - $payment->unique_hash = Hashids::connection(Payment::class)->encode($payment->id); + $serial = (new SerialNumberFormatter()) + ->setModel($payment) + ->setCompany($payment->company_id) + ->setCustomer($payment->customer_id) + ->setNextNumbers(); + + $payment->sequence_number = $serial->nextSequenceNumber; + $payment->customer_sequence_number = $serial->nextCustomerSequenceNumber; $payment->save(); + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + + if ((string)$payment['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($payment); + } + $customFields = $request->customFields; if ($customFields) { @@ -173,9 +172,10 @@ public static function createPayment($request) } $payment = Payment::with([ - 'user', + 'customer', 'invoice', 'paymentMethod', + 'fields' ])->find($payment->id); return $payment; @@ -183,34 +183,40 @@ public static function createPayment($request) public function updatePayment($request) { - $oldAmount = $this->amount; + $data = $request->all(); - if ($request->has('invoice_id') && $request->invoice_id && ($oldAmount != $request->amount)) { - $amount = (int)$request->amount - (int)$oldAmount; + if ($request->invoice_id && (! $this->invoice_id || $this->invoice_id !== $request->invoice_id)) { $invoice = Invoice::find($request->invoice_id); - $invoice->due_amount = (int)$invoice->due_amount - (int)$amount; - - if ($invoice->due_amount < 0) { - return [ - 'error' => 'invalid_amount', - ]; - } + $invoice->subtractInvoicePayment($request->amount); + } - if ($invoice->due_amount == 0) { - $invoice->status = Invoice::STATUS_COMPLETED; - $invoice->paid_status = Invoice::STATUS_PAID; - } else { - $invoice->status = $invoice->getPreviousStatus(); - $invoice->paid_status = Invoice::STATUS_PARTIALLY_PAID; - } + if ($this->invoice_id && (! $request->invoice_id || $this->invoice_id !== $request->invoice_id)) { + $invoice = Invoice::find($this->invoice_id); + $invoice->addInvoicePayment($this->amount); + } - $invoice->save(); + if ($this->invoice_id === $request->invoice_id && $request->amount !== $this->amount) { + $invoice = Invoice::find($this->invoice_id); + $invoice->addInvoicePayment($this->amount); + $invoice->subtractInvoicePayment($request->amount); } - $data = $request->all(); + $serial = (new SerialNumberFormatter()) + ->setModel($this) + ->setCompany($this->company_id) + ->setCustomer($request->customer_id) + ->setModelObject($this->id) + ->setNextNumbers(); + $data['customer_sequence_number'] = $serial->nextCustomerSequenceNumber; $this->update($data); + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + + if ((string)$data['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($this); + } + $customFields = $request->customFields; if ($customFields) { @@ -218,7 +224,7 @@ public function updatePayment($request) } $payment = Payment::with([ - 'user', + 'customer', 'invoice', 'paymentMethod', ]) @@ -252,54 +258,10 @@ public static function deletePayments($ids) return true; } - private function strposX($haystack, $needle, $number) - { - if ($number == '1') { - return strpos($haystack, $needle); - } elseif ($number > '1') { - return strpos( - $haystack, - $needle, - $this->strposX($haystack, $needle, $number - 1) + strlen($needle) - ); - } else { - return error_log('Error: Value for parameter $number is out of range'); - } - } - - public static function getNextPaymentNumber($value) - { - // Get the last created order - $payment = Payment::where('payment_number', 'LIKE', $value.'-%') - ->orderBy('payment_number', 'desc') - ->first(); - - // Get number length config - $numberLength = CompanySetting::getSetting('payment_number_length', request()->header('company')); - $numberLengthText = "%0{$numberLength}d"; - - if (! $payment) { - // We get here if there is no order at all - // If there is no number set it to 0, which will be 1 at the end. - $number = 0; - } else { - $number = explode("-", $payment->payment_number); - $number = $number[1]; - } - // If we have ORD000001 in the database then we only want the number - // So the substr returns this 000001 - - // Add the string in front and higher up the number. - // the %05d part makes sure that there are always 6 numbers in the string. - // so it adds the missing zero's when needed. - - return sprintf($numberLengthText, intval($number) + 1); - } - public function scopeWhereSearch($query, $search) { foreach (explode(' ', $search) as $term) { - $query->whereHas('user', function ($query) use ($term) { + $query->whereHas('customer', function ($query) use ($term) { $query->where('name', 'LIKE', '%'.$term.'%') ->orWhere('contact_name', 'LIKE', '%'.$term.'%') ->orWhere('company_name', 'LIKE', '%'.$term.'%'); @@ -320,7 +282,7 @@ public function scopePaymentMethod($query, $paymentMethodId) public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); @@ -351,8 +313,8 @@ public function scopeApplyFilters($query, array $filters) } if ($filters->get('orderByField') || $filters->get('orderBy')) { - $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'payment_number'; - $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'asc'; + $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'sequence_number'; + $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'desc'; $query->whereOrder($field, $orderBy); } } @@ -367,14 +329,14 @@ public function scopeWherePayment($query, $payment_id) $query->orWhere('id', $payment_id); } - public function scopeWhereCompany($query, $company_id) + public function scopeWhereCompany($query) { - $query->where('payments.company_id', $company_id); + $query->where('payments.company_id', request()->header('company')); } public function scopeWhereCustomer($query, $customer_id) { - $query->where('payments.user_id', $customer_id); + $query->where('payments.customer_id', $customer_id); } public function getPDFData() @@ -410,7 +372,7 @@ public function getCompanyAddress() public function getCustomerBillingAddress() { - if ($this->user && (! $this->user->billingAddress()->exists())) { + if ($this->customer && (! $this->customer->billingAddress()->exists())) { return false; } diff --git a/app/Models/PaymentMethod.php b/app/Models/PaymentMethod.php index e84dbff87..87a6d4f59 100644 --- a/app/Models/PaymentMethod.php +++ b/app/Models/PaymentMethod.php @@ -21,9 +21,9 @@ public function company() return $this->belongsTo(Company::class); } - public function scopeWhereCompany($query, $company_id) + public function scopeWhereCompany($query) { - $query->where('company_id', $company_id); + $query->where('company_id', request()->header('company')); } public function scopeWherePaymentMethod($query, $payment_id) @@ -56,7 +56,7 @@ public function scopeApplyFilters($query, array $filters) public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); diff --git a/app/Models/RecurringInvoice.php b/app/Models/RecurringInvoice.php new file mode 100644 index 000000000..5bef5fdc8 --- /dev/null +++ b/app/Models/RecurringInvoice.php @@ -0,0 +1,413 @@ + 'float', + 'send_automatically' => 'boolean' + ]; + + public function getFormattedStartsAtAttribute() + { + $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); + + return Carbon::parse($this->starts_at)->format($dateFormat); + } + + public function getFormattedNextInvoiceAtAttribute() + { + $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); + + return Carbon::parse($this->next_invoice_at)->format($dateFormat); + } + + public function getFormattedLimitDateAttribute() + { + $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); + + return Carbon::parse($this->limit_date)->format($dateFormat); + } + + public function getFormattedCreatedAtAttribute() + { + $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); + + return Carbon::parse($this->created_at)->format($dateFormat); + } + + public function invoices() + { + return $this->hasMany(Invoice::class); + } + + public function taxes() + { + return $this->hasMany(Tax::class); + } + + public function items() + { + return $this->hasMany(InvoiceItem::class); + } + + public function customer() + { + return $this->belongsTo(Customer::class); + } + + public function company() + { + return $this->belongsTo(Company::class); + } + + public function creator() + { + return $this->belongsTo(User::class, 'creator_id'); + } + + public function currency() + { + return $this->belongsTo(Currency::class); + } + + public function scopeWhereCompany($query) + { + $query->where('recurring_invoices.company_id', request()->header('company')); + } + + public function scopePaginateData($query, $limit) + { + if ($limit == 'all') { + return $query->get(); + } + + return $query->paginate($limit); + } + + public function scopeWhereOrder($query, $orderByField, $orderBy) + { + $query->orderBy($orderByField, $orderBy); + } + + public function scopeWhereStatus($query, $status) + { + return $query->where('recurring_invoices.status', $status); + } + + public function scopeWhereCustomer($query, $customer_id) + { + $query->where('customer_id', $customer_id); + } + + public function scopeRecurringInvoicesStartBetween($query, $start, $end) + { + return $query->whereBetween( + 'starts_at', + [$start->format('Y-m-d'), $end->format('Y-m-d')] + ); + } + + public function scopeWhereSearch($query, $search) + { + foreach (explode(' ', $search) as $term) { + $query->whereHas('customer', function ($query) use ($term) { + $query->where('name', 'LIKE', '%'.$term.'%') + ->orWhere('contact_name', 'LIKE', '%'.$term.'%') + ->orWhere('company_name', 'LIKE', '%'.$term.'%'); + }); + } + } + + public function scopeApplyFilters($query, array $filters) + { + $filters = collect($filters); + + if ($filters->get('status') && $filters->get('status') !== 'ALL') { + $query->whereStatus($filters->get('status')); + } + + if ($filters->get('search')) { + $query->whereSearch($filters->get('search')); + } + + if ($filters->get('from_date') && $filters->get('to_date')) { + $start = Carbon::createFromFormat('Y-m-d', $filters->get('from_date')); + $end = Carbon::createFromFormat('Y-m-d', $filters->get('to_date')); + $query->recurringInvoicesStartBetween($start, $end); + } + + if ($filters->get('customer_id')) { + $query->whereCustomer($filters->get('customer_id')); + } + + if ($filters->get('orderByField') || $filters->get('orderBy')) { + $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'created_at'; + $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'asc'; + $query->whereOrder($field, $orderBy); + } + } + + public static function createFromRequest(RecurringInvoiceRequest $request) + { + $recurringInvoice = self::create($request->getRecurringInvoicePayload()); + + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + + if ((string)$recurringInvoice['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($recurringInvoice); + } + + self::createItems($recurringInvoice, $request->items); + + if ($request->has('taxes') && (! empty($request->taxes))) { + self::createTaxes($recurringInvoice, $request->taxes); + } + + if ($request->customFields) { + $recurringInvoice->addCustomFields($request->customFields); + } + + return $recurringInvoice; + } + + public function updateFromRequest(RecurringInvoiceRequest $request) + { + $data = $request->getRecurringInvoicePayload(); + + $this->update($data); + + $company_currency = CompanySetting::getSetting('currency', $request->header('company')); + + if ((string)$data['currency_id'] !== $company_currency) { + ExchangeRateLog::addExchangeRateLog($this); + } + + $this->items()->delete(); + self::createItems($this, $request->items); + + $this->taxes()->delete(); + if ($request->has('taxes') && (! empty($request->taxes))) { + self::createTaxes($this, $request->taxes); + } + + if ($request->customFields) { + $this->updateCustomFields($request->customFields); + } + + return $this; + } + + public static function createItems($recurringInvoice, $invoiceItems) + { + foreach ($invoiceItems as $invoiceItem) { + $invoiceItem['company_id'] = $recurringInvoice->company_id; + $item = $recurringInvoice->items()->create($invoiceItem); + if (array_key_exists('taxes', $invoiceItem) && $invoiceItem['taxes']) { + foreach ($invoiceItem['taxes'] as $tax) { + $tax['company_id'] = $recurringInvoice->company_id; + if (gettype($tax['amount']) !== "NULL") { + $item->taxes()->create($tax); + } + } + } + } + } + + public static function createTaxes($recurringInvoice, $taxes) + { + foreach ($taxes as $tax) { + $tax['company_id'] = $recurringInvoice->company_id; + + if (gettype($tax['amount']) !== "NULL") { + $recurringInvoice->taxes()->create($tax); + } + } + } + + public function generateInvoice() + { + if ($this->limit_by == 'DATE') { + $startDate = Carbon::today()->format('Y-m-d'); + + $endDate = $this->limit_date; + + if ($endDate >= $startDate) { + $this->createInvoice(); + + $this->updateNextInvoiceDate(); + } else { + $this->markStatusAsCompleted(); + } + } elseif ($this->limit_by == 'COUNT') { + $invoiceCount = Invoice::where('recurring_invoice_id', $this->id)->count(); + + if ($invoiceCount < $this->limit_count) { + $this->createInvoice(); + + $this->updateNextInvoiceDate(); + } else { + $this->markStatusAsCompleted(); + } + } else { + $this->createInvoice(); + + $this->updateNextInvoiceDate(); + } + } + + public function createInvoice() + { + //get invoice_number + $serial = (new SerialNumberFormatter()) + ->setModel(new Invoice()) + ->setCompany($this->company_id) + ->setCustomer($this->customer_id) + ->setNextNumbers(); + + $newInvoice['creator_id'] = $this->creator_id; + $newInvoice['invoice_date'] = Carbon::today()->format('Y-m-d'); + $newInvoice['due_date'] = Carbon::today()->addDays(7)->format('Y-m-d'); + $newInvoice['status'] = Invoice::STATUS_DRAFT; + $newInvoice['company_id'] = $this->company_id; + $newInvoice['paid_status'] = Invoice::STATUS_UNPAID; + $newInvoice['sub_total'] = $this->sub_total; + $newInvoice['tax_per_item'] = $this->tax_per_item; + $newInvoice['discount_per_item'] = $this->discount_per_item; + $newInvoice['tax'] = $this->tax; + $newInvoice['total'] = $this->total; + $newInvoice['customer_id'] = $this->customer_id; + $newInvoice['currency_id'] = Customer::find($this->customer_id)->currency_id; + $newInvoice['template_name'] = $this->template_name; + $newInvoice['due_amount'] = $this->total; + $newInvoice['recurring_invoice_id'] = $this->id; + $newInvoice['discount_val'] = $this->discount_val; + $newInvoice['discount'] = $this->discount; + $newInvoice['discount_type'] = $this->discount_type; + $newInvoice['notes'] = $this->notes; + $newInvoice['exchange_rate'] = $this->exchange_rate; + $newInvoice['invoice_number'] = $serial->getNextNumber(); + $newInvoice['sequence_number'] = $serial->nextSequenceNumber; + $newInvoice['customer_sequence_number'] = $serial->nextCustomerSequenceNumber; + $newInvoice['base_due_amount'] = $this->exchange_rate * $this->due_amount; + $newInvoice['base_discount_val'] = $this->exchange_rate * $this->discount_val; + $newInvoice['base_sub_total'] = $this->exchange_rate * $this->sub_total; + $newInvoice['base_tax'] = $this->exchange_rate * $this->tax; + $newInvoice['base_total'] = $this->exchange_rate * $this->total; + $invoice = Invoice::create($newInvoice); + $invoice->unique_hash = Hashids::connection(Invoice::class)->encode($invoice->id); + $invoice->save(); + + $this->load('items.taxes'); + Invoice::createItems($invoice, $this->items->toArray()); + + if ($this->taxes()->exists()) { + Invoice::createTaxes($invoice, $this->taxes->toArray()); + } + + if ($this->fields()->exists()) { + $customField = []; + + foreach ($this->fields as $data) { + $customField[] = [ + 'id' => $data->custom_field_id, + 'value' => $data->defaultAnswer + ]; + } + + $invoice->addCustomFields($customField); + } + + //send automatically + if ($this->send_automatically == true) { + $data = [ + 'body' => CompanySetting::getSetting('invoice_mail_body', $this->company_id), + 'from' => config('mail.from.address'), + 'to' => $this->customer->email, + 'subject' => 'New Invoice', + 'invoice' => $invoice->toArray(), + 'customer' => $invoice->customer->toArray(), + 'company' => Company::find($invoice->company_id) + ]; + $invoice->send($data); + } + } + + public function markStatusAsCompleted() + { + if ($this->status == $this->status) { + $this->status = self::COMPLETED; + $this->save(); + } + } + + public static function getNextInvoiceDate($frequency, $starts_at) + { + $cron = new Cron\CronExpression($frequency); + + return $cron->getNextRunDate($starts_at)->format('Y-m-d H:i:s'); + } + + public function updateNextInvoiceDate() + { + $nextInvoiceAt = self::getNextInvoiceDate($this->frequency, $this->starts_at); + + $this->next_invoice_at = $nextInvoiceAt; + $this->save(); + } + + public static function deleteRecurringInvoice($ids) + { + foreach ($ids as $id) { + $recurringInvoice = self::find($id); + + if ($recurringInvoice->invoices()->exists()) { + $recurringInvoice->invoices()->update(['recurring_invoice_id' => null]); + } + + if ($recurringInvoice->items()->exists()) { + $recurringInvoice->items()->delete(); + } + + if ($recurringInvoice->taxes()->exists()) { + $recurringInvoice->taxes()->delete(); + } + + $recurringInvoice->delete(); + } + + return true; + } +} diff --git a/app/Models/Tax.php b/app/Models/Tax.php index 04e4d95fa..11bd2da31 100644 --- a/app/Models/Tax.php +++ b/app/Models/Tax.php @@ -11,16 +11,8 @@ class Tax extends Model { use HasFactory; - protected $fillable = [ - 'name', - 'amount', - 'company_id', - 'percent', - 'tax_type_id', - 'invoice_id', - 'estimate_id', - 'item_id', - 'compound_tax', + protected $guarded = [ + 'id' ]; protected $casts = [ @@ -38,11 +30,21 @@ public function invoice() return $this->belongsTo(Invoice::class); } + public function recurringInvoice() + { + return $this->belongsTo(RecurringInvoice::class); + } + public function estimate() { return $this->belongsTo(Estimate::class); } + public function currency() + { + return $this->belongsTo(Currency::class); + } + public function invoiceItem() { return $this->belongsTo(InvoiceItem::class); diff --git a/app/Models/TaxType.php b/app/Models/TaxType.php index 8d6d1a0f7..9c66cfcfb 100644 --- a/app/Models/TaxType.php +++ b/app/Models/TaxType.php @@ -20,6 +20,7 @@ class TaxType extends Model protected $casts = [ 'percent' => 'float', + 'compound_tax' => 'boolean' ]; public function taxes() @@ -27,9 +28,14 @@ public function taxes() return $this->hasMany(Tax::class); } - public function scopeWhereCompany($query, $company_id) + public function company() { - $query->where('company_id', $company_id); + return $this->belongsTo(Company::class); + } + + public function scopeWhereCompany($query) + { + $query->where('company_id', request()->header('company')); } public function scopeWhereTaxType($query, $tax_type_id) @@ -73,7 +79,7 @@ public function scopeWhereSearch($query, $search) public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); diff --git a/app/Models/Unit.php b/app/Models/Unit.php index 6caee67b6..7d682edf0 100644 --- a/app/Models/Unit.php +++ b/app/Models/Unit.php @@ -21,9 +21,9 @@ public function company() return $this->belongsTo(Company::class); } - public function scopeWhereCompany($query, $company_id) + public function scopeWhereCompany($query) { - $query->where('company_id', $company_id); + $query->where('company_id', request()->header('company')); } public function scopeWhereUnit($query, $unit_id) @@ -31,10 +31,19 @@ public function scopeWhereUnit($query, $unit_id) $query->orWhere('id', $unit_id); } + public function scopeWhereSearch($query, $search) + { + return $query->where('name', 'LIKE', '%'.$search.'%'); + } + public function scopeApplyFilters($query, array $filters) { $filters = collect($filters); + if ($filters->get('search')) { + $query->whereSearch($filters->get('search')); + } + if ($filters->get('unit_id')) { $query->whereUnit($filters->get('unit_id')); } @@ -42,12 +51,14 @@ public function scopeApplyFilters($query, array $filters) if ($filters->get('company_id')) { $query->whereCompany($filters->get('company_id')); } + + return $query; } public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); diff --git a/app/Models/User.php b/app/Models/User.php index 222a68a83..ddb767c3e 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -3,6 +3,7 @@ namespace Crater\Models; use Carbon\Carbon; +use Crater\Http\Requests\UserRequest; use Crater\Notifications\MailResetPasswordNotification; use Crater\Traits\HasCustomFieldsTrait; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -10,7 +11,10 @@ use Illuminate\Notifications\Notifiable; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Schema; use Laravel\Sanctum\HasApiTokens; +use Silber\Bouncer\BouncerFacade; +use Silber\Bouncer\Database\HasRolesAndAbilities; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; @@ -21,29 +25,15 @@ class User extends Authenticatable implements HasMedia use InteractsWithMedia; use HasCustomFieldsTrait; use HasFactory; + use HasRolesAndAbilities; /** * The attributes that are mass assignable. * * @var array */ - protected $fillable = [ - 'name', - 'email', - 'company_id', - 'password', - 'facebook_id', - 'currency_id', - 'google_id', - 'github_id', - 'role', - 'group_id', - 'phone', - 'company_name', - 'contact_name', - 'website', - 'enable_portal', - 'creator_id', + protected $guarded = [ + 'id' ]; /** @@ -99,14 +89,19 @@ public static function login($request) public function getFormattedCreatedAtAttribute($value) { - $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); + $dateFormat = CompanySetting::getSetting('carbon_date_format', request()->header('company')); return Carbon::parse($this->created_at)->format($dateFormat); } public function estimates() { - return $this->hasMany(Estimate::class); + return $this->hasMany(Estimate::class, 'creator_id'); + } + + public function customers() + { + return $this->hasMany(Customer::class, 'creator_id'); } public function currency() @@ -119,39 +114,34 @@ public function creator() return $this->belongsTo('Crater\Models\User', 'creator_id'); } - public function company() + public function companies() { - return $this->belongsTo(Company::class); + return $this->belongsToMany(Company::class, 'user_company', 'user_id', 'company_id'); } - public function addresses() + public function recurringInvoices() { - return $this->hasMany(Address::class); + return $this->hasMany(RecurringInvoice::class, 'creator_id'); } public function expenses() { - return $this->hasMany(Expense::class); - } - - public function billingAddress() - { - return $this->hasOne(Address::class)->where('type', Address::BILLING_TYPE); + return $this->hasMany(Expense::class, 'creator_id'); } - public function shippingAddress() + public function payments() { - return $this->hasOne(Address::class)->where('type', Address::SHIPPING_TYPE); + return $this->hasMany(Payment::class, 'creator_id'); } - public function payments() + public function invoices() { - return $this->hasMany(Payment::class); + return $this->hasMany(Invoice::class, 'creator_id'); } - public function invoices() + public function items() { - return $this->hasMany(Invoice::class); + return $this->hasMany(Item::class, 'creator_id'); } public function settings() @@ -203,15 +193,10 @@ public function scopeWhereEmail($query, $email) return $query->where('email', 'LIKE', '%'.$email.'%'); } - public function scopeCustomer($query) - { - return $query->where('role', 'customer'); - } - public function scopePaginateData($query, $limit) { if ($limit == 'all') { - return collect(['data' => $query->get()]); + return $query->get(); } return $query->paginate($limit); @@ -225,10 +210,6 @@ public function scopeApplyFilters($query, array $filters) $query->whereSearch($filters->get('search')); } - if ($filters->get('contact_name')) { - $query->whereContactName($filters->get('contact_name')); - } - if ($filters->get('display_name')) { $query->whereDisplayName($filters->get('display_name')); } @@ -237,10 +218,6 @@ public function scopeApplyFilters($query, array $filters) $query->whereEmail($filters->get('email')); } - if ($filters->get('customer_id')) { - $query->whereCustomer($filters->get('customer_id')); - } - if ($filters->get('phone')) { $query->wherePhone($filters->get('phone')); } @@ -252,16 +229,6 @@ public function scopeApplyFilters($query, array $filters) } } - public function scopeWhereCompany($query, $company_id) - { - $query->where('users.company_id', $company_id); - } - - public function scopeWhereCustomer($query, $customer_id) - { - $query->orWhere('users.id', $customer_id); - } - public function scopeWhereSuperAdmin($query) { $query->orWhere('role', 'super admin'); @@ -288,33 +255,6 @@ public function scopeInvoicesBetween($query, $start, $end) }); } - public static function deleteCustomers($ids) - { - foreach ($ids as $id) { - $customer = self::find($id); - - if ($customer->estimates()->exists()) { - $customer->estimates()->delete(); - } - - if ($customer->invoices()->exists()) { - $customer->invoices()->delete(); - } - - if ($customer->payments()->exists()) { - $customer->payments()->delete(); - } - - if ($customer->addresses()->exists()) { - $customer->addresses()->delete(); - } - - $customer->delete(); - } - - return true; - } - public function getAvatarAttribute() { $avatar = $this->getMedia('admin_avatar')->first(); @@ -336,6 +276,9 @@ public static function createCustomer($request) 'contact_name', 'website', 'enable_portal', + 'invoice_prefix', + 'estimate_prefix', + 'payment_prefix' ]); $data['creator_id'] = Auth::id(); @@ -375,6 +318,9 @@ public static function updateCustomer($request, $customer) 'contact_name', 'website', 'enable_portal', + 'invoice_prefix', + 'estimate_prefix', + 'payment_prefix' ]); $data['role'] = 'customer'; @@ -416,15 +362,139 @@ public function setSettings($settings) } } + public function hasCompany($company_id) + { + $companies = $this->companies()->pluck('company_id')->toArray(); + + return in_array($company_id, $companies); + } + + public function getAllSettings() + { + return $this->settings()->get()->mapWithKeys(function ($item) { + return [$item['key'] => $item['value']]; + }); + } + public function getSettings($settings) { - $settings = $this->settings()->whereIn('key', $settings)->get(); - $companySettings = []; + return $this->settings()->whereIn('key', $settings)->get()->mapWithKeys(function ($item) { + return [$item['key'] => $item['value']]; + }); + } + + public function isOwner() + { + if (Schema::hasColumn('companies', 'owner_id')) { + $company = Company::find(request()->header('company')); + + if ($company && $this->id === $company->owner_id) { + return true; + } + } else { + return $this->role == 'super admin' || $this->role == 'admin'; + } + + return false; + } + + public static function createFromRequest(UserRequest $request) + { + $user = self::create($request->getUserPayload()); + + $user->setSettings([ + 'language' => CompanySetting::getSetting('language', $request->header('company')), + ]); + + $companies = collect($request->companies); + $user->companies()->sync($companies->pluck('id')); + + foreach ($companies as $company) { + BouncerFacade::scope()->to($company['id']); + + BouncerFacade::sync($user)->roles([$company['role']]); + } + + return $user; + } + + public function updateFromRequest(UserRequest $request) + { + $this->update($request->getUserPayload()); + + $companies = collect($request->companies); + $this->companies()->sync($companies->pluck('id')); + + foreach ($companies as $company) { + BouncerFacade::scope()->to($company['id']); + + BouncerFacade::sync($this)->roles([$company['role']]); + } + + return $this; + } + + public function checkAccess($data) + { + if ($this->isOwner()) { + return true; + } + + if ((! $data->data['owner_only']) && empty($data->data['ability'])) { + return true; + } - foreach ($settings as $setting) { - $companySettings[$setting->key] = $setting->value; + if ((! $data->data['owner_only']) && (! empty($data->data['ability'])) && (! empty($data->data['model'])) && $this->can($data->data['ability'], $data->data['model'])) { + return true; } - return $companySettings; + if ((! $data->data['owner_only']) && $this->can($data->data['ability'])) { + return true; + } + + return false; + } + + public static function deleteUsers($ids) + { + foreach ($ids as $id) { + $user = self::find($id); + + if ($user->invoices()->exists()) { + $user->invoices()->update(['creator_id' => null]); + } + + if ($user->estimates()->exists()) { + $user->estimates()->update(['creator_id' => null]); + } + + if ($user->customers()->exists()) { + $user->customers()->update(['creator_id' => null]); + } + + if ($user->recurringInvoices()->exists()) { + $user->recurringInvoices()->update(['creator_id' => null]); + } + + if ($user->expenses()->exists()) { + $user->expenses()->update(['creator_id' => null]); + } + + if ($user->payments()->exists()) { + $user->payments()->update(['creator_id' => null]); + } + + if ($user->items()->exists()) { + $user->items()->update(['creator_id' => null]); + } + + if ($user->settings()->exists()) { + $user->settings()->delete(); + } + + $user->delete(); + } + + return true; } } diff --git a/app/Policies/CompanyPolicy.php b/app/Policies/CompanyPolicy.php new file mode 100644 index 000000000..acaa3399c --- /dev/null +++ b/app/Policies/CompanyPolicy.php @@ -0,0 +1,39 @@ +isOwner()) { + return true; + } + + return false; + } + + public function delete(User $user, Company $company) + { + if ($user->id === $company->owner_id) { + return true; + } + + return false; + } + + public function transferOwnership(User $user, Company $company) + { + if ($user->id === $company->owner_id) { + return true; + } + + return false; + } +} diff --git a/app/Policies/CustomFieldPolicy.php b/app/Policies/CustomFieldPolicy.php new file mode 100644 index 000000000..ac1444882 --- /dev/null +++ b/app/Policies/CustomFieldPolicy.php @@ -0,0 +1,123 @@ +hasCompany($customField->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('create-custom-field', CustomField::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\CustomField $customField + * @return mixed + */ + public function update(User $user, CustomField $customField) + { + if (BouncerFacade::can('edit-custom-field', $customField) && $user->hasCompany($customField->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\CustomField $customField + * @return mixed + */ + public function delete(User $user, CustomField $customField) + { + if (BouncerFacade::can('delete-custom-field', $customField) && $user->hasCompany($customField->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\CustomField $customField + * @return mixed + */ + public function restore(User $user, CustomField $customField) + { + if (BouncerFacade::can('delete-custom-field', $customField) && $user->hasCompany($customField->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\CustomField $customField + * @return mixed + */ + public function forceDelete(User $user, CustomField $customField) + { + if (BouncerFacade::can('delete-custom-field', $customField) && $user->hasCompany($customField->company_id)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/CustomerPolicy.php b/app/Policies/CustomerPolicy.php new file mode 100644 index 000000000..69fb19c1a --- /dev/null +++ b/app/Policies/CustomerPolicy.php @@ -0,0 +1,138 @@ +hasCompany($company->id)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/EstimatePolicy.php b/app/Policies/EstimatePolicy.php new file mode 100644 index 000000000..118004978 --- /dev/null +++ b/app/Policies/EstimatePolicy.php @@ -0,0 +1,154 @@ +hasCompany($estimate->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('create-estimate', Estimate::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Estimate $estimate + * @return mixed + */ + public function update(User $user, Estimate $estimate) + { + if (BouncerFacade::can('edit-estimate', $estimate) && $user->hasCompany($estimate->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Estimate $estimate + * @return mixed + */ + public function delete(User $user, Estimate $estimate) + { + if (BouncerFacade::can('delete-estimate', $estimate) && $user->hasCompany($estimate->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Estimate $estimate + * @return mixed + */ + public function restore(User $user, Estimate $estimate) + { + if (BouncerFacade::can('delete-estimate', $estimate) && $user->hasCompany($estimate->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Estimate $estimate + * @return mixed + */ + public function forceDelete(User $user, Estimate $estimate) + { + if (BouncerFacade::can('delete-estimate', $estimate) && $user->hasCompany($estimate->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can send email of the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Estimate $payment + * @return mixed + */ + public function send(User $user, Estimate $estimate) + { + if (BouncerFacade::can('send-estimate', $estimate) && $user->hasCompany($estimate->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function deleteMultiple(User $user) + { + if (BouncerFacade::can('delete-estimate', Estimate::class)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/ExchangeRateProviderPolicy.php b/app/Policies/ExchangeRateProviderPolicy.php new file mode 100644 index 000000000..cfdef4e44 --- /dev/null +++ b/app/Policies/ExchangeRateProviderPolicy.php @@ -0,0 +1,115 @@ +hasCompany($exchangeRateProvider->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return \Illuminate\Auth\Access\Response|bool + */ + public function create(User $user) + { + if (BouncerFacade::can('create-exchange-rate-provider', ExchangeRateProvider::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\ExchangeRateProvider $exchangeRateProvider + * @return \Illuminate\Auth\Access\Response|bool + */ + public function update(User $user, ExchangeRateProvider $exchangeRateProvider) + { + if (BouncerFacade::can('edit-exchange-rate-provider', $exchangeRateProvider) && $user->hasCompany($exchangeRateProvider->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\ExchangeRateProvider $exchangeRateProvider + * @return \Illuminate\Auth\Access\Response|bool + */ + public function delete(User $user, ExchangeRateProvider $exchangeRateProvider) + { + if (BouncerFacade::can('delete-exchange-rate-provider', $exchangeRateProvider) && $user->hasCompany($exchangeRateProvider->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\ExchangeRateProvider $exchangeRateProvider + * @return \Illuminate\Auth\Access\Response|bool + */ + public function restore(User $user, ExchangeRateProvider $exchangeRateProvider) + { + // + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\ExchangeRateProvider $exchangeRateProvider + * @return \Illuminate\Auth\Access\Response|bool + */ + public function forceDelete(User $user, ExchangeRateProvider $exchangeRateProvider) + { + // + } +} diff --git a/app/Policies/ExpenseCategoryPolicy.php b/app/Policies/ExpenseCategoryPolicy.php new file mode 100644 index 000000000..abe2e7389 --- /dev/null +++ b/app/Policies/ExpenseCategoryPolicy.php @@ -0,0 +1,124 @@ +hasCompany($expenseCategory->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('view-expense', Expense::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\ExpenseCategory $expenseCategory + * @return mixed + */ + public function update(User $user, ExpenseCategory $expenseCategory) + { + if (BouncerFacade::can('view-expense', Expense::class) && $user->hasCompany($expenseCategory->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\ExpenseCategory $expenseCategory + * @return mixed + */ + public function delete(User $user, ExpenseCategory $expenseCategory) + { + if (BouncerFacade::can('view-expense', Expense::class) && $user->hasCompany($expenseCategory->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\ExpenseCategory $expenseCategory + * @return mixed + */ + public function restore(User $user, ExpenseCategory $expenseCategory) + { + if (BouncerFacade::can('view-expense', Expense::class) && $user->hasCompany($expenseCategory->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\ExpenseCategory $expenseCategory + * @return mixed + */ + public function forceDelete(User $user, ExpenseCategory $expenseCategory) + { + if (BouncerFacade::can('view-expense', Expense::class) && $user->hasCompany($expenseCategory->company_id)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/ExpensePolicy.php b/app/Policies/ExpensePolicy.php new file mode 100644 index 000000000..451ff0f34 --- /dev/null +++ b/app/Policies/ExpensePolicy.php @@ -0,0 +1,138 @@ +hasCompany($expense->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('create-expense', Expense::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Expense $expense + * @return mixed + */ + public function update(User $user, Expense $expense) + { + if (BouncerFacade::can('edit-expense', $expense) && $user->hasCompany($expense->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Expense $expense + * @return mixed + */ + public function delete(User $user, Expense $expense) + { + if (BouncerFacade::can('delete-expense', $expense) && $user->hasCompany($expense->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Expense $expense + * @return mixed + */ + public function restore(User $user, Expense $expense) + { + if (BouncerFacade::can('delete-expense', $expense) && $user->hasCompany($expense->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Expense $expense + * @return mixed + */ + public function forceDelete(User $user, Expense $expense) + { + if (BouncerFacade::can('delete-expense', $expense) && $user->hasCompany($expense->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function deleteMultiple(User $user) + { + if (BouncerFacade::can('delete-expense', Expense::class)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/InvoicePolicy.php b/app/Policies/InvoicePolicy.php new file mode 100644 index 000000000..9ed9454db --- /dev/null +++ b/app/Policies/InvoicePolicy.php @@ -0,0 +1,154 @@ +hasCompany($invoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('create-invoice', Invoice::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Invoice $invoice + * @return mixed + */ + public function update(User $user, Invoice $invoice) + { + if (BouncerFacade::can('edit-invoice', $invoice) && $user->hasCompany($invoice->company_id)) { + return $invoice->allow_edit; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Invoice $invoice + * @return mixed + */ + public function delete(User $user, Invoice $invoice) + { + if (BouncerFacade::can('delete-invoice', $invoice) && $user->hasCompany($invoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Invoice $invoice + * @return mixed + */ + public function restore(User $user, Invoice $invoice) + { + if (BouncerFacade::can('delete-invoice', $invoice) && $user->hasCompany($invoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Invoice $invoice + * @return mixed + */ + public function forceDelete(User $user, Invoice $invoice) + { + if (BouncerFacade::can('delete-invoice', $invoice) && $user->hasCompany($invoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can send email of the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Payment $payment + * @return mixed + */ + public function send(User $user, Invoice $invoice) + { + if (BouncerFacade::can('send-invoice', $invoice) && $user->hasCompany($invoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function deleteMultiple(User $user) + { + if (BouncerFacade::can('delete-invoice', Invoice::class)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/ItemPolicy.php b/app/Policies/ItemPolicy.php new file mode 100644 index 000000000..928301808 --- /dev/null +++ b/app/Policies/ItemPolicy.php @@ -0,0 +1,138 @@ +hasCompany($item->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('create-item', Item::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Item $item + * @return mixed + */ + public function update(User $user, Item $item) + { + if (BouncerFacade::can('edit-item', $item) && $user->hasCompany($item->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Item $item + * @return mixed + */ + public function delete(User $user, Item $item) + { + if (BouncerFacade::can('delete-item', $item) && $user->hasCompany($item->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Item $item + * @return mixed + */ + public function restore(User $user, Item $item) + { + if (BouncerFacade::can('delete-item', $item) && $user->hasCompany($item->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Item $item + * @return mixed + */ + public function forceDelete(User $user, Item $item) + { + if (BouncerFacade::can('delete-item', $item) && $user->hasCompany($item->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function deleteMultiple(User $user) + { + if (BouncerFacade::can('delete-item', Item::class)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/NotePolicy.php b/app/Policies/NotePolicy.php new file mode 100644 index 000000000..748f18d60 --- /dev/null +++ b/app/Policies/NotePolicy.php @@ -0,0 +1,31 @@ +hasCompany($paymentMethod->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('view-payment', Payment::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\PaymentMethod $paymentMethod + * @return mixed + */ + public function update(User $user, PaymentMethod $paymentMethod) + { + if (BouncerFacade::can('view-payment', Payment::class) && $user->hasCompany($paymentMethod->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\PaymentMethod $paymentMethod + * @return mixed + */ + public function delete(User $user, PaymentMethod $paymentMethod) + { + if (BouncerFacade::can('view-payment', Payment::class) && $user->hasCompany($paymentMethod->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\PaymentMethod $paymentMethod + * @return mixed + */ + public function restore(User $user, PaymentMethod $paymentMethod) + { + if (BouncerFacade::can('view-payment', Payment::class) && $user->hasCompany($paymentMethod->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\PaymentMethod $paymentMethod + * @return mixed + */ + public function forceDelete(User $user, PaymentMethod $paymentMethod) + { + if (BouncerFacade::can('view-payment', Payment::class) && $user->hasCompany($paymentMethod->company_id)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/PaymentPolicy.php b/app/Policies/PaymentPolicy.php new file mode 100644 index 000000000..43e71f4e7 --- /dev/null +++ b/app/Policies/PaymentPolicy.php @@ -0,0 +1,154 @@ +hasCompany($payment->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('create-payment', Payment::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Payment $payment + * @return mixed + */ + public function update(User $user, Payment $payment) + { + if (BouncerFacade::can('edit-payment', $payment) && $user->hasCompany($payment->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Payment $payment + * @return mixed + */ + public function delete(User $user, Payment $payment) + { + if (BouncerFacade::can('delete-payment', $payment) && $user->hasCompany($payment->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Payment $payment + * @return mixed + */ + public function restore(User $user, Payment $payment) + { + if (BouncerFacade::can('delete-payment', $payment) && $user->hasCompany($payment->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Payment $payment + * @return mixed + */ + public function forceDelete(User $user, Payment $payment) + { + if (BouncerFacade::can('delete-payment', $payment) && $user->hasCompany($payment->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can send email of the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Payment $payment + * @return mixed + */ + public function send(User $user, Payment $payment) + { + if (BouncerFacade::can('send-payment', $payment) && $user->hasCompany($payment->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function deleteMultiple(User $user) + { + if (BouncerFacade::can('delete-payment', Payment::class)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/RecurringInvoicePolicy.php b/app/Policies/RecurringInvoicePolicy.php new file mode 100644 index 000000000..18ad5536d --- /dev/null +++ b/app/Policies/RecurringInvoicePolicy.php @@ -0,0 +1,138 @@ +hasCompany($recurringInvoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return \Illuminate\Auth\Access\Response|bool + */ + public function create(User $user) + { + if (BouncerFacade::can('create-recurring-invoice', RecurringInvoice::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\RecurringInvoice $recurringInvoice + * @return \Illuminate\Auth\Access\Response|bool + */ + public function update(User $user, RecurringInvoice $recurringInvoice) + { + if (BouncerFacade::can('edit-recurring-invoice', $recurringInvoice) && $user->hasCompany($recurringInvoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\RecurringInvoice $recurringInvoice + * @return \Illuminate\Auth\Access\Response|bool + */ + public function delete(User $user, RecurringInvoice $recurringInvoice) + { + if (BouncerFacade::can('delete-recurring-invoice', $recurringInvoice) && $user->hasCompany($recurringInvoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\RecurringInvoice $recurringInvoice + * @return \Illuminate\Auth\Access\Response|bool + */ + public function restore(User $user, RecurringInvoice $recurringInvoice) + { + if (BouncerFacade::can('delete-recurring-invoice', $recurringInvoice) && $user->hasCompany($recurringInvoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\RecurringInvoice $recurringInvoice + * @return \Illuminate\Auth\Access\Response|bool + */ + public function forceDelete(User $user, RecurringInvoice $recurringInvoice) + { + if (BouncerFacade::can('delete-recurring-invoice', $recurringInvoice) && $user->hasCompany($recurringInvoice->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function deleteMultiple(User $user) + { + if (BouncerFacade::can('delete-recurring-invoice', RecurringInvoice::class)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/ReportPolicy.php b/app/Policies/ReportPolicy.php new file mode 100644 index 000000000..0e6faf4da --- /dev/null +++ b/app/Policies/ReportPolicy.php @@ -0,0 +1,22 @@ +hasCompany($company->id)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/RolePolicy.php b/app/Policies/RolePolicy.php new file mode 100644 index 000000000..cd8acc0be --- /dev/null +++ b/app/Policies/RolePolicy.php @@ -0,0 +1,122 @@ +isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can view the model. + * + * @param \Crater\Models\User $user + * @param \Silber\Bouncer\Database\Role $role + * @return mixed + */ + public function view(User $user, Role $role) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Silber\Bouncer\Database\Role $role + * @return mixed + */ + public function update(User $user, Role $role) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Silber\Bouncer\Database\Role $role + * @return mixed + */ + public function delete(User $user, Role $role) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Silber\Bouncer\Database\Role $role + * @return mixed + */ + public function restore(User $user, Role $role) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Silber\Bouncer\Database\Role $role + * @return mixed + */ + public function forceDelete(User $user, Role $role) + { + if ($user->isOwner()) { + return true; + } + + return false; + } +} diff --git a/app/Policies/SettingsPolicy.php b/app/Policies/SettingsPolicy.php new file mode 100644 index 000000000..a405bc378 --- /dev/null +++ b/app/Policies/SettingsPolicy.php @@ -0,0 +1,48 @@ +id == $company->owner_id) { + return true; + } + + return false; + } + + public function manageBackups(User $user) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + public function manageFileDisk(User $user) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + public function manageEmailConfig(User $user) + { + if ($user->isOwner()) { + return true; + } + + return false; + } +} diff --git a/app/Policies/TaxTypePolicy.php b/app/Policies/TaxTypePolicy.php new file mode 100644 index 000000000..ab770da77 --- /dev/null +++ b/app/Policies/TaxTypePolicy.php @@ -0,0 +1,123 @@ +hasCompany($taxType->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('create-tax-type', TaxType::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\TaxType $taxType + * @return mixed + */ + public function update(User $user, TaxType $taxType) + { + if (BouncerFacade::can('edit-tax-type', $taxType) && $user->hasCompany($taxType->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\TaxType $taxType + * @return mixed + */ + public function delete(User $user, TaxType $taxType) + { + if (BouncerFacade::can('delete-tax-type', $taxType) && $user->hasCompany($taxType->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\TaxType $taxType + * @return mixed + */ + public function restore(User $user, TaxType $taxType) + { + if (BouncerFacade::can('delete-tax-type', $taxType) && $user->hasCompany($taxType->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\TaxType $taxType + * @return mixed + */ + public function forceDelete(User $user, TaxType $taxType) + { + if (BouncerFacade::can('delete-tax-type', $taxType) && $user->hasCompany($taxType->company_id)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/UnitPolicy.php b/app/Policies/UnitPolicy.php new file mode 100644 index 000000000..3672d06aa --- /dev/null +++ b/app/Policies/UnitPolicy.php @@ -0,0 +1,124 @@ +hasCompany($unit->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if (BouncerFacade::can('view-item', Item::class)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Unit $unit + * @return mixed + */ + public function update(User $user, Unit $unit) + { + if (BouncerFacade::can('view-item', Item::class) && $user->hasCompany($unit->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Unit $unit + * @return mixed + */ + public function delete(User $user, Unit $unit) + { + if (BouncerFacade::can('view-item', Item::class) && $user->hasCompany($unit->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Unit $unit + * @return mixed + */ + public function restore(User $user, Unit $unit) + { + if (BouncerFacade::can('view-item', Item::class) && $user->hasCompany($unit->company_id)) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\Unit $unit + * @return mixed + */ + public function forceDelete(User $user, Unit $unit) + { + if (BouncerFacade::can('view-item', Item::class) && $user->hasCompany($unit->company_id)) { + return true; + } + + return false; + } +} diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php new file mode 100644 index 000000000..2f48c3f21 --- /dev/null +++ b/app/Policies/UserPolicy.php @@ -0,0 +1,152 @@ +isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can view the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\User $model + * @return mixed + */ + public function view(User $user, User $model) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function create(User $user) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\User $model + * @return mixed + */ + public function update(User $user, User $model) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\User $model + * @return mixed + */ + public function delete(User $user, User $model) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can restore the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\User $model + * @return mixed + */ + public function restore(User $user, User $model) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can permanently delete the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\User $model + * @return mixed + */ + public function forceDelete(User $user, User $model) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can invite the model. + * + * @param \Crater\Models\User $user + * @param \Crater\Models\User $model + * @return mixed + */ + public function invite(User $user, User $model) + { + if ($user->isOwner()) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete models. + * + * @param \Crater\Models\User $user + * @return mixed + */ + public function deleteMultiple(User $user) + { + if ($user->isOwner()) { + return true; + } + + return false; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index aaa232a56..6ae500082 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -3,6 +3,7 @@ namespace Crater\Providers; use Illuminate\Pagination\Paginator; +use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -15,7 +16,11 @@ class AppServiceProvider extends ServiceProvider public function boot() { Paginator::useBootstrapThree(); - $this->loadJsonTranslationsFrom(resource_path('assets/js/plugins')); + $this->loadJsonTranslationsFrom(resource_path('scripts/locales')); + + if (\Storage::disk('local')->has('database_created') && Schema::hasTable('abilities')) { + $this->addMenus(); + } } /** @@ -27,4 +32,32 @@ public function register() { // } + + public function addMenus() + { + //main menu + \Menu::make('main_menu', function ($menu) { + foreach (config('crater.main_menu') as $data) { + $this->generateMenu($menu, $data); + } + }); + + //setting menu + \Menu::make('setting_menu', function ($menu) { + foreach (config('crater.setting_menu') as $data) { + $this->generateMenu($menu, $data); + } + }); + } + + public function generateMenu($menu, $data) + { + $menu->add($data['title'], $data['link']) + ->data('icon', $data['icon']) + ->data('name', $data['name']) + ->data('owner_only', $data['owner_only']) + ->data('ability', $data['ability']) + ->data('model', $data['model']) + ->data('group', $data['group']); + } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 2b3cafebc..4dc11da84 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -2,6 +2,20 @@ namespace Crater\Providers; +use Crater\Policies\CompanyPolicy; +use Crater\Policies\CustomerPolicy; +use Crater\Policies\DashboardPolicy; +use Crater\Policies\EstimatePolicy; +use Crater\Policies\ExpensePolicy; +use Crater\Policies\InvoicePolicy; +use Crater\Policies\ItemPolicy; +use Crater\Policies\NotePolicy; +use Crater\Policies\PaymentPolicy; +use Crater\Policies\RecurringInvoicePolicy; +use Crater\Policies\ReportPolicy; +use Crater\Policies\SettingsPolicy; +use Crater\Policies\UserPolicy; +use Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider @@ -12,7 +26,21 @@ class AuthServiceProvider extends ServiceProvider * @var array */ protected $policies = [ - 'Crater\Model' => 'Crater\Policies\ModelPolicy', + \Crater\Models\Customer::class => \Crater\Policies\CustomerPolicy::class, + \Crater\Models\Invoice::class => \Crater\Policies\InvoicePolicy::class, + \Crater\Models\Estimate::class => \Crater\Policies\EstimatePolicy::class, + \Crater\Models\Payment::class => \Crater\Policies\PaymentPolicy::class, + \Crater\Models\Expense::class => \Crater\Policies\ExpensePolicy::class, + \Crater\Models\ExpenseCategory::class => \Crater\Policies\ExpenseCategoryPolicy::class, + \Crater\Models\PaymentMethod::class => \Crater\Policies\PaymentMethodPolicy::class, + \Crater\Models\TaxType::class => \Crater\Policies\TaxTypePolicy::class, + \Crater\Models\CustomField::class => \Crater\Policies\CustomFieldPolicy::class, + \Crater\Models\User::class => \Crater\Policies\UserPolicy::class, + \Crater\Models\Item::class => \Crater\Policies\ItemPolicy::class, + \Silber\Bouncer\Database\Role::class => \Crater\Policies\RolePolicy::class, + \Crater\Models\Unit::class => \Crater\Policies\UnitPolicy::class, + \Crater\Models\RecurringInvoice::class => \Crater\Policies\RecurringInvoicePolicy::class, + \Crater\Models\ExchangeRateProvider::class => \Crater\Policies\ExchangeRateProviderPolicy::class, ]; /** @@ -23,5 +51,33 @@ class AuthServiceProvider extends ServiceProvider public function boot() { $this->registerPolicies(); + + Gate::define('create company', [CompanyPolicy::class, 'create']); + Gate::define('transfer company ownership', [CompanyPolicy::class, 'transferOwnership']); + Gate::define('delete company', [CompanyPolicy::class, 'delete']); + + Gate::define('manage company', [SettingsPolicy::class, 'manageCompany']); + Gate::define('manage backups', [SettingsPolicy::class, 'manageBackups']); + Gate::define('manage file disk', [SettingsPolicy::class, 'manageFileDisk']); + Gate::define('manage email config', [SettingsPolicy::class, 'manageEmailConfig']); + Gate::define('manage notes', [NotePolicy::class, 'manageNotes']); + Gate::define('view notes', [NotePolicy::class, 'viewNotes']); + + Gate::define('send invoice', [InvoicePolicy::class, 'send']); + Gate::define('send estimate', [EstimatePolicy::class, 'send']); + Gate::define('send payment', [PaymentPolicy::class, 'send']); + + Gate::define('delete multiple items', [ItemPolicy::class, 'deleteMultiple']); + Gate::define('delete multiple customers', [CustomerPolicy::class, 'deleteMultiple']); + Gate::define('delete multiple users', [UserPolicy::class, 'deleteMultiple']); + Gate::define('delete multiple invoices', [InvoicePolicy::class, 'deleteMultiple']); + Gate::define('delete multiple estimates', [EstimatePolicy::class, 'deleteMultiple']); + Gate::define('delete multiple expenses', [ExpensePolicy::class, 'deleteMultiple']); + Gate::define('delete multiple payments', [PaymentPolicy::class, 'deleteMultiple']); + Gate::define('delete multiple recurring invoices', [RecurringInvoicePolicy::class, 'deleteMultiple']); + + Gate::define('view dashboard', [DashboardPolicy::class, 'view']); + + Gate::define('view report', [ReportPolicy::class, 'viewReport']); } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index bdc7782c4..76b5312bf 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -19,6 +19,15 @@ class RouteServiceProvider extends ServiceProvider */ public const HOME = '/admin/dashboard'; + /** + * The path to the "customer home" route for your application. + * + * This is used by Laravel authentication to redirect customers after login. + * + * @var string + */ + public const CUSTOMER_HOME = '/customer/dashboard'; + /** * The controller namespace for the application. * diff --git a/app/Rules/UniqueNumber.php b/app/Rules/UniqueNumber.php deleted file mode 100644 index 23f0d65d9..000000000 --- a/app/Rules/UniqueNumber.php +++ /dev/null @@ -1,67 +0,0 @@ -class = $class; - $this->id = $id; - } - - /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * @return bool - */ - public function passes($attribute, $value) - { - if ($value && count(explode("-", $value)) > 2) { - $number = explode("-", $value); - $uniqueNumber = $number[0].'-'.sprintf('%06d', intval($number[1])); - } else { - $uniqueNumber = $value; - } - - $this->type = $attribute; - - if ($this->id && $this->class::where('id', $this->id)->where($attribute, $uniqueNumber)->first()) { - return true; - } - - if ($this->class::where($attribute, $uniqueNumber)->first()) { - return false; - } - - return true; - } - - /** - * Get the validation error message. - * - * @return string - */ - public function message() - { - $type = str_replace('_', ' ', $this->type); - - return "{$type} is already used."; - } -} diff --git a/app/Services/SerialNumberFormatter.php b/app/Services/SerialNumberFormatter.php new file mode 100644 index 000000000..bcedc9215 --- /dev/null +++ b/app/Services/SerialNumberFormatter.php @@ -0,0 +1,235 @@ +model = $model; + + return $this; + } + + public function setModelObject($id = null) + { + $this->ob = $this->model::find($id); + + if ($this->ob && $this->ob->sequence_number) { + $this->nextSequenceNumber = $this->ob->sequence_number; + } + + if (isSet($this->ob) && isSet($this->ob->customer_sequence_number) && isSet($this->customer) && $this->ob->customer_id == $this->customer->id) { + $this->nextCustomerSequenceNumber = $this->ob->customer_sequence_number; + } + + return $this; + } + + /** + * @param $company + * @return $this + */ + public function setCompany($company) + { + $this->company = $company; + + return $this; + } + + /** + * @param $customer + * @return $this + */ + public function setCustomer($customer = null) + { + $this->customer = Customer::find($customer); + + return $this; + } + + /** + * @return string + */ + public function getNextNumber($data = null) + { + $modelName = strtolower(class_basename($this->model)); + $settingKey = $modelName.'_number_format'; + $companyId = $this->company; + + if (request()->has('format')) { + $format = request()->format; + } else { + $format = CompanySetting::getSetting( + $settingKey, + $companyId + ); + } + $this->setNextNumbers(); + + $serialNumber = $this->generateSerialNumber( + $format + ); + + return $serialNumber; + } + + public function setNextNumbers() + { + $this->nextSequenceNumber ? + $this->nextSequenceNumber : $this->setNextSequenceNumber(); + + $this->nextCustomerSequenceNumber ? + $this->nextCustomerSequenceNumber : $this->setNextCustomerSequenceNumber(); + + return $this; + } + + /** + * @return $this + */ + public function setNextSequenceNumber() + { + $companyId = $this->company; + + $last = $this->model::orderBy('sequence_number', 'desc') + ->where('company_id', $companyId) + ->where('sequence_number', '<>', null) + ->take(1) + ->first(); + + $this->nextSequenceNumber = ($last) ? $last->sequence_number + 1 : 1; + + return $this; + } + + /** + * @return self + */ + public function setNextCustomerSequenceNumber() + { + $customer_id = ($this->customer) ? $this->customer->id : 1; + + $last = $this->model::orderBy('customer_sequence_number', 'desc') + ->where('company_id', $this->company) + ->where('customer_id', $customer_id) + ->where('customer_sequence_number', '<>', null) + ->take(1) + ->first(); + + $this->nextCustomerSequenceNumber = ($last) ? $last->customer_sequence_number + 1 : 1; + + return $this; + } + + public static function getPlaceholders(string $format) + { + $regex = "/{{([A-Z_]{1,})(?::)?([a-zA-Z0-9_]{1,4}|.{1})?}}/"; + + preg_match_all($regex, $format, $placeholders); + array_shift($placeholders); + $validPlaceholders = collect(); + + /** @var array */ + $mappedPlaceholders = array_map( + null, + current($placeholders), + end($placeholders) + ); + + foreach ($mappedPlaceholders as $placeholder) { + $name = current($placeholder); + $value = end($placeholder); + + if (in_array($name, self::VALID_PLACEHOLDERS)) { + $validPlaceholders->push([ + "name" => $name, + "value" => $value + ]); + } + } + + return $validPlaceholders; + } + + /** + * @return string + */ + private function generateSerialNumber(string $format) + { + $serialNumber = ''; + + $placeholders = self::getPlaceholders($format); + + foreach ($placeholders as $placeholder) { + $name = $placeholder['name']; + $value = $placeholder['value']; + + switch ($name) { + case "SEQUENCE": + $value = $value ? $value : 6; + $serialNumber .= str_pad($this->nextSequenceNumber, $value, 0, STR_PAD_LEFT); + + break; + case "DATE_FORMAT": + $value = $value ? $value : 'Y'; + $serialNumber .= date($value); + + break; + case "RANDOM_SEQUENCE": + $value = $value ? $value : 6; + $serialNumber .= substr(bin2hex(random_bytes($value)), 0, $value); + + break; + case "CUSTOMER_SERIES": + if (isset($this->customer)) { + $serialNumber .= $this->customer->prefix ?? 'CST'; + } else { + $serialNumber .= 'CST'; + } + + break; + case "CUSTOMER_SEQUENCE": + $serialNumber .= str_pad($this->nextCustomerSequenceNumber, $value, 0, STR_PAD_LEFT); + + break; + default: + $serialNumber .= $value; + } + } + + return $serialNumber; + } +} diff --git a/app/Space/EnvironmentManager.php b/app/Space/EnvironmentManager.php index b162f2527..7ba57dcb8 100755 --- a/app/Space/EnvironmentManager.php +++ b/app/Space/EnvironmentManager.php @@ -78,14 +78,14 @@ public function saveDatabaseVariables(DatabaseEnvironmentRequest $request) try { $conn = $this->checkDatabaseConnection($request); - $requirement = $this->checkVersionRequirements($request, $conn); - - if ($requirement) { - return [ - 'error' => 'minimum_version_requirement', - 'requirement' => $requirement, - ]; - } + // $requirement = $this->checkVersionRequirements($request, $conn); + + // if ($requirement) { + // return [ + // 'error' => 'minimum_version_requirement', + // 'requirement' => $requirement, + // ]; + // } if (\Schema::hasTable('users')) { return [ diff --git a/app/Space/FilePermissionChecker.php b/app/Space/FilePermissionChecker.php new file mode 100644 index 000000000..e8d30ce6b --- /dev/null +++ b/app/Space/FilePermissionChecker.php @@ -0,0 +1,83 @@ +results['permissions'] = []; + + $this->results['errors'] = null; + } + + /** + * Check for the folders permissions. + * + * @param array $folders + * @return array + */ + public function check(array $folders) + { + foreach ($folders as $folder => $permission) { + if (! ($this->getPermission($folder) >= $permission)) { + $this->addFileAndSetErrors($folder, $permission, false); + } else { + $this->addFile($folder, $permission, true); + } + } + + return $this->results; + } + + /** + * Get a folder permission. + * + * @param $folder + * @return string + */ + private function getPermission($folder) + { + return substr(sprintf('%o', fileperms(base_path($folder))), -4); + } + + /** + * Add the file to the list of results. + * + * @param $folder + * @param $permission + * @param $isSet + */ + private function addFile($folder, $permission, $isSet) + { + array_push($this->results['permissions'], [ + 'folder' => $folder, + 'permission' => $permission, + 'isSet' => $isSet, + ]); + } + + /** + * Add the file and set the errors. + * + * @param $folder + * @param $permission + * @param $isSet + */ + private function addFileAndSetErrors($folder, $permission, $isSet) + { + $this->addFile($folder, $permission, $isSet); + + $this->results['errors'] = true; + } +} diff --git a/app/Space/PermissionsChecker.php b/app/Space/PermissionsChecker.php deleted file mode 100755 index d06773e20..000000000 --- a/app/Space/PermissionsChecker.php +++ /dev/null @@ -1,83 +0,0 @@ -results['permissions'] = []; - - $this->results['errors'] = null; - } - - /** - * Check for the folders permissions. - * - * @param array $folders - * @return array - */ - public function check(array $folders) - { - foreach ($folders as $folder => $permission) { - if (! ($this->getPermission($folder) >= $permission)) { - $this->addFileAndSetErrors($folder, $permission, false); - } else { - $this->addFile($folder, $permission, true); - } - } - - return $this->results; - } - - /** - * Get a folder permission. - * - * @param $folder - * @return string - */ - private function getPermission($folder) - { - return substr(sprintf('%o', fileperms(base_path($folder))), -4); - } - - /** - * Add the file to the list of results. - * - * @param $folder - * @param $permission - * @param $isSet - */ - private function addFile($folder, $permission, $isSet) - { - array_push($this->results['permissions'], [ - 'folder' => $folder, - 'permission' => $permission, - 'isSet' => $isSet, - ]); - } - - /** - * Add the file and set the errors. - * - * @param $folder - * @param $permission - * @param $isSet - */ - private function addFileAndSetErrors($folder, $permission, $isSet) - { - $this->addFile($folder, $permission, $isSet); - - $this->results['errors'] = true; - } -} diff --git a/app/Space/Updater.php b/app/Space/Updater.php index 775f9c3b4..f14b08408 100644 --- a/app/Space/Updater.php +++ b/app/Space/Updater.php @@ -16,7 +16,7 @@ class Updater public static function checkForUpdate($installed_version) { $data = null; - if (env('APP_ENV') === 'development') { + if (env('APP_ENV') === 'development' || env('APP_ENV') === 'local') { $url = 'downloads/check/latest/'.$installed_version.'?type=update&is_dev=1'; } else { $url = 'downloads/check/latest/'.$installed_version.'?type=update'; diff --git a/app/Space/helpers.php b/app/Space/helpers.php index bd17a0a14..7885d1c6f 100644 --- a/app/Space/helpers.php +++ b/app/Space/helpers.php @@ -133,3 +133,11 @@ function getRelatedSlugs($type, $slug, $id = 0) ->where('id', '<>', $id) ->get(); } + +function respondJson($error, $message) +{ + return response()->json([ + 'error' => $error, + 'message' => $message + ], 422); +} diff --git a/app/Traits/ExchangeRateProvidersTrait.php b/app/Traits/ExchangeRateProvidersTrait.php new file mode 100644 index 000000000..dcb3d04a1 --- /dev/null +++ b/app/Traits/ExchangeRateProvidersTrait.php @@ -0,0 +1,213 @@ +json(); + + if (array_key_exists('success', $response)) { + if ($response["success"] == false) { + return respondJson($response["error"]["message"], $response["error"]["message"]); + } + } + + return response()->json([ + 'exchangeRate' => array_values($response["rates"]), + ], 200); + + break; + + case 'currency_layer': + $url = "http://api.currencylayer.com/live?access_key=".$filter['key']."&source={$baseCurrencyCode}¤cies={$currencyCode}"; + $response = Http::get($url)->json(); + + if (array_key_exists('success', $response)) { + if ($response["success"] == false) { + return respondJson($response["error"]["info"], $response["error"]["info"]); + } + } + + return response()->json([ + 'exchangeRate' => array_values($response['quotes']), + ], 200); + + break; + + case 'open_exchange_rate': + $url = "https://openexchangerates.org/api/latest.json?app_id=".$filter['key']."&base={$baseCurrencyCode}&symbols={$currencyCode}"; + $response = Http::get($url)->json(); + + if (array_key_exists("error", $response)) { + return respondJson($response["message"], $response["description"]); + } + + return response()->json([ + 'exchangeRate' => array_values($response["rates"]), + ], 200); + + break; + + case 'currency_converter': + $url = $this->getCurrencyConverterUrl($filter['driver_config']); + $url = $url."/api/v7/convert?apiKey=".$filter['key']; + + $query = "{$baseCurrencyCode}_{$currencyCode}"; + $url = $url."&q={$query}"."&compact=y"; + $response = Http::get($url)->json(); + + return response()->json([ + 'exchangeRate' => array_values($response[$query]), + ], 200); + + break; + } + } + + public function getCurrencyConverterUrl($data) + { + switch ($data['type']) { + case 'PREMIUM': + return "https://api.currconv.com"; + + break; + + case 'PREPAID': + return "https://prepaid.currconv.com"; + + break; + + case 'FREE': + return "https://free.currconv.com"; + + break; + + case 'DEDICATED': + return $data['url']; + + break; + } + } + + public function getSupportedCurrencies($request) + { + $message = 'Please Enter Valid Provider Key.'; + $error = 'invalid_key'; + + $server_message = 'Server not responding'; + $error_message = 'server_error'; + + switch ($request->driver) { + case 'currency_freak': + $url = "https://api.currencyfreaks.com/currency-symbols"; + $response = Http::get($url)->json(); + $checkKey = $this->getUrl($request); + + if ($response == null || $checkKey == null) { + return respondJson($error_message, $server_message); + } + + if (array_key_exists('success', $checkKey) && array_key_exists('error', $checkKey)) { + if ($checkKey['error']['status'] == 404) { + return respondJson($error, $message); + } + } + + return response()->json(['supportedCurrencies' => array_keys($response)]); + + break; + + case 'currency_layer': + $url = "http://api.currencylayer.com/list?access_key=".$request->key; + $response = Http::get($url)->json(); + + if ($response == null) { + return respondJson($error_message, $server_message); + } + + if (array_key_exists('currencies', $response)) { + return response()->json(['supportedCurrencies' => array_keys($response['currencies'])]); + } + + return respondJson($error, $message); + + break; + + case 'open_exchange_rate': + $url = "https://openexchangerates.org/api/currencies.json"; + $response = Http::get($url)->json(); + $checkKey = $this->getUrl($request); + + if ($response == null || $checkKey == null) { + return respondJson($error_message, $server_message); + } + + if (array_key_exists('error', $checkKey)) { + if ($checkKey['status'] == 401) { + return respondJson($error, $message); + } + } + + return response()->json(['supportedCurrencies' => array_keys($response)]); + + break; + + case 'currency_converter': + $response = $this->getUrl($request); + + if ($response == null) { + return respondJson($error_message, $server_message); + } + + if (array_key_exists('results', $response)) { + return response()->json(['supportedCurrencies' => array_keys($response['results'])]); + } + + return respondJson($error, $message); + + break; + } + } + + public function getUrl($request) + { + switch ($request->driver) { + case 'currency_freak': + $url = "https://api.currencyfreaks.com/latest?apikey=".$request->key."&symbols=INR&base=USD"; + + return Http::get($url)->json(); + + break; + + case 'currency_layer': + $url = "http://api.currencylayer.com/live?access_key=".$request->key."&source=INR¤cies=USD"; + + return Http::get($url)->json(); + + break; + + case 'open_exchange_rate': + $url = "https://openexchangerates.org/api/latest.json?app_id=".$request->key."&base=INR&symbols=USD"; + + return Http::get($url)->json(); + + break; + + case 'currency_converter': + $url = $this->getCurrencyConverterUrl($request)."/api/v7/currencies?apiKey=".$request->key; + + return Http::get($url)->json(); + + break; + } + } +} diff --git a/app/Traits/GeneratesMenuTrait.php b/app/Traits/GeneratesMenuTrait.php new file mode 100644 index 000000000..b3c4f1d60 --- /dev/null +++ b/app/Traits/GeneratesMenuTrait.php @@ -0,0 +1,25 @@ +items->toArray() as $data) { + if ($user->checkAccess($data)) { + $menu[] = [ + 'title' => $data->title, + 'link' => $data->link->path['url'], + 'icon' => $data->data['icon'], + 'name' => $data->data['name'], + 'group' => $data->data['group'], + ]; + } + } + + return $menu; + } +} diff --git a/app/Traits/GeneratesPdfTrait.php b/app/Traits/GeneratesPdfTrait.php index aa941bbbd..fb7763c4b 100644 --- a/app/Traits/GeneratesPdfTrait.php +++ b/app/Traits/GeneratesPdfTrait.php @@ -110,7 +110,7 @@ public function generatePDF($collection_name, $file_name, $deleteExistingFile = public function getFieldsArray() { - $customer = $this->user; + $customer = $this->customer; $shippingAddress = $customer->shippingAddress ?? new Address(); $billingAddress = $customer->billingAddress ?? new Address(); $companyAddress = $this->company->address ?? new Address(); @@ -148,7 +148,7 @@ public function getFieldsArray() ]; $customFields = $this->fields; - $customerCustomFields = $this->user->fields; + $customerCustomFields = $this->customer->fields; foreach ($customFields as $customField) { $fields['{'.$customField->customField->slug.'}'] = $customField->defaultAnswer; diff --git a/app/Traits/HasCustomFieldsTrait.php b/app/Traits/HasCustomFieldsTrait.php index cf370104f..d24d21ddd 100644 --- a/app/Traits/HasCustomFieldsTrait.php +++ b/app/Traits/HasCustomFieldsTrait.php @@ -11,9 +11,21 @@ public function fields() return $this->morphMany('Crater\Models\CustomFieldValue', 'custom_field_valuable'); } + protected static function booted() + { + static::deleting(function ($data) { + if ($data->fields()->exists()) { + $data->fields()->delete(); + } + }); + } + public function addCustomFields($customFields) { foreach ($customFields as $field) { + if (! is_array($field)) { + $field = (array)$field; + } $customField = CustomField::find($field['id']); $customFieldValue = [ @@ -30,6 +42,10 @@ public function addCustomFields($customFields) public function updateCustomFields($customFields) { foreach ($customFields as $field) { + if (! is_array($field)) { + $field = (array)$field; + } + $customField = CustomField::find($field['id']); $customFieldValue = $this->fields()->firstOrCreate([ 'custom_field_id' => $customField->id, @@ -45,8 +61,21 @@ public function updateCustomFields($customFields) public function getCustomFieldBySlug($slug) { - return $this->fields()->with('customField')->whereHas('customField', function ($query) use ($slug) { - $query->where('slug', $slug); - })->first(); + return $this->fields() + ->with('customField') + ->whereHas('customField', function ($query) use ($slug) { + $query->where('slug', $slug); + })->first(); + } + + public function getCustomFieldValueBySlug($slug) + { + $value = $this->getCustomFieldBySlug($slug); + + if ($value) { + return $value->defaultAnswer; + } + + return null; } } diff --git a/bootstrap/app.php b/bootstrap/app.php index bf7a30ebb..fe20b6904 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -12,7 +12,7 @@ */ $app = new Illuminate\Foundation\Application( - realpath(__DIR__ . '/../') + realpath(__DIR__.'/../') ); /* diff --git a/composer.json b/composer.json index c93db91f6..94383058c 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "bytefury/crater", - "description": "Free & Open Source Invoice App for Freelancers & Small Businesses. https://craterapp.com", + "description": "Free & Open Source Invoice App for Individuals & Small Businesses. https://craterapp.com", "keywords": [ "framework", "laravel" @@ -12,16 +12,21 @@ "aws/aws-sdk-php": "^3.142", "barryvdh/laravel-dompdf": "^0.9.0", "doctrine/dbal": "^2.10", + "dragonmantank/cron-expression": "^3.1", "fideloper/proxy": "^4.0", "fruitcake/laravel-cors": "^1.0", "guzzlehttp/guzzle": "^7.0.1", + "innocenzi/laravel-vite": "^0.1.1", "intervention/image": "^2.3", + "jasonmccreary/laravel-test-assertions": "^2.0", "laravel/framework": "^8.0", "laravel/helpers": "^1.1", "laravel/sanctum": "^2.6", "laravel/tinker": "^2.0", "laravel/ui": "^3.0", + "lavary/laravel-menu": "^1.8", "league/flysystem-aws-s3-v3": "^1.0", + "silber/bouncer": "v1.0.0-rc.10", "spatie/flysystem-dropbox": "^1.2", "spatie/laravel-backup": "^6.11", "spatie/laravel-medialibrary": "^8.7", @@ -33,12 +38,12 @@ "facade/ignition": "^2.3.6", "friendsofphp/php-cs-fixer": "^3.0", "fzaninotto/faker": "^1.9.1", - "jasonmccreary/laravel-test-assertions": "^1.0", "mockery/mockery": "^1.3.1", "nunomaduro/collision": "^5.0", - "pestphp/pest": "^0.3.1", - "pestphp/pest-plugin-faker": "^0.3.0", - "pestphp/pest-plugin-laravel": "^0.3.0", + "pestphp/pest": "^1.0", + "pestphp/pest-plugin-faker": "^1.0", + "pestphp/pest-plugin-laravel": "^1.0", + "pestphp/pest-plugin-parallel": "^0.2.1", "phpunit/phpunit": "^9.0" }, "autoload": { diff --git a/composer.lock b/composer.lock index 6f79b0f53..44963d5bb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9d462bef6d76e80b0de5d85984ee4a8f", + "content-hash": "eb81aa1e30524298d27332065ccf6d5d", "packages": [ { "name": "asm89/stack-cors", @@ -62,27 +62,78 @@ }, "time": "2019-12-24T22:41:47+00:00" }, + { + "name": "aws/aws-crt-php", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/awslabs/aws-crt-php.git", + "reference": "3942776a8c99209908ee0b287746263725685732" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/3942776a8c99209908ee0b287746263725685732", + "reference": "3942776a8c99209908ee0b287746263725685732", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|^5.4.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "AWS SDK Common Runtime Team", + "email": "aws-sdk-common-runtime@amazon.com" + } + ], + "description": "AWS Common Runtime for PHP", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "crt", + "sdk" + ], + "support": { + "issues": "https://github.com/awslabs/aws-crt-php/issues", + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.0.2" + }, + "time": "2021-09-03T22:57:30+00:00" + }, { "name": "aws/aws-sdk-php", - "version": "3.185.0", + "version": "3.202.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "6c919bc226f7ff3fbcbce948f31e618066d02ad0" + "reference": "4460481cd63446454869534c69ddaf00cffa45be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/6c919bc226f7ff3fbcbce948f31e618066d02ad0", - "reference": "6c919bc226f7ff3fbcbce948f31e618066d02ad0", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/4460481cd63446454869534c69ddaf00cffa45be", + "reference": "4460481cd63446454869534c69ddaf00cffa45be", "shasum": "" }, "require": { + "aws/aws-crt-php": "^1.0.2", "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", "guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0", "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.7.0", + "guzzlehttp/psr7": "^1.7.0|^2.0", "mtdowling/jmespath.php": "^2.6", "php": ">=5.5" }, @@ -148,9 +199,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.185.0" + "source": "https://github.com/aws/aws-sdk-php/tree/3.202.2" }, - "time": "2021-06-23T18:21:07+00:00" + "time": "2021-11-12T19:15:25+00:00" }, { "name": "barryvdh/laravel-dompdf", @@ -220,16 +271,16 @@ }, { "name": "brick/math", - "version": "0.9.2", + "version": "0.9.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", "shasum": "" }, "require": { @@ -239,7 +290,7 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.3.2" + "vimeo/psalm": "4.9.2" }, "type": "library", "autoload": { @@ -264,36 +315,114 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.2" + "source": "https://github.com/brick/math/tree/0.9.3" }, "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/brick/math", "type": "tidelift" } ], - "time": "2021-01-20T22:51:39+00:00" + "time": "2021-08-15T20:50:18+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + }, + "time": "2021-08-13T13:06:58+00:00" }, { "name": "doctrine/cache", - "version": "2.0.3", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88" + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/c9622c6820d3ede1e2315a6a377ea1076e421d88", - "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88", + "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", "shasum": "" }, "require": { "php": "~7.1 || ^8.0" }, "conflict": { - "doctrine/common": ">2.2,<2.4", - "psr/cache": ">=3" + "doctrine/common": ">2.2,<2.4" }, "require-dev": { "alcaeus/mongo-php-adapter": "^1.1", @@ -302,8 +431,9 @@ "mongodb/mongodb": "^1.1", "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", "predis/predis": "~1.0", - "psr/cache": "^1.0 || ^2.0", - "symfony/cache": "^4.4 || ^5.2" + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", + "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" }, "suggest": { "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" @@ -355,7 +485,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.0.3" + "source": "https://github.com/doctrine/cache/tree/2.1.1" }, "funding": [ { @@ -371,20 +501,20 @@ "type": "tidelift" } ], - "time": "2021-05-25T09:43:04+00:00" + "time": "2021-07-17T14:49:29+00:00" }, { "name": "doctrine/dbal", - "version": "2.13.2", + "version": "2.13.5", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4" + "reference": "d92ddb260547c2a7b650ff140f744eb6f395d8fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/8dd39d2ead4409ce652fd4f02621060f009ea5e4", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/d92ddb260547c2a7b650ff140f744eb6f395d8fc", + "reference": "d92ddb260547c2a7b650ff140f744eb6f395d8fc", "shasum": "" }, "require": { @@ -396,13 +526,14 @@ }, "require-dev": { "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2020.2", - "phpstan/phpstan": "0.12.81", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.5", - "squizlabs/php_codesniffer": "3.6.0", + "jetbrains/phpstorm-stubs": "2021.1", + "phpstan/phpstan": "1.1.1", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.10", + "psalm/plugin-phpunit": "0.16.1", + "squizlabs/php_codesniffer": "3.6.1", "symfony/cache": "^4.4", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.6.4" + "vimeo/psalm": "4.12.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -463,7 +594,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.2" + "source": "https://github.com/doctrine/dbal/tree/2.13.5" }, "funding": [ { @@ -479,7 +610,7 @@ "type": "tidelift" } ], - "time": "2021-06-18T21:48:39+00:00" + "time": "2021-11-11T16:27:36+00:00" }, { "name": "doctrine/deprecations", @@ -620,34 +751,30 @@ }, { "name": "doctrine/inflector", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", - "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^7.0", - "phpstan/phpstan": "^0.11", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-strict-rules": "^0.11", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.10" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" @@ -695,7 +822,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.x" + "source": "https://github.com/doctrine/inflector/tree/2.0.4" }, "funding": [ { @@ -711,7 +838,76 @@ "type": "tidelift" } ], - "time": "2020-05-29T15:13:26+00:00" + "time": "2021-10-22T20:16:43+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" }, { "name": "doctrine/lexer", @@ -1132,16 +1328,16 @@ }, { "name": "graham-campbell/guzzle-factory", - "version": "v5.0.0", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Guzzle-Factory.git", - "reference": "5f6eae0dba2f2a02d72d42f11f3ff9f9f61e1cc8" + "reference": "983999291ca63d8da45be573574416b3c21f751b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Guzzle-Factory/zipball/5f6eae0dba2f2a02d72d42f11f3ff9f9f61e1cc8", - "reference": "5f6eae0dba2f2a02d72d42f11f3ff9f9f61e1cc8", + "url": "https://api.github.com/repos/GrahamCampbell/Guzzle-Factory/zipball/983999291ca63d8da45be573574416b3c21f751b", + "reference": "983999291ca63d8da45be573574416b3c21f751b", "shasum": "" }, "require": { @@ -1165,7 +1361,7 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk" } ], "description": "Provides A Simple Guzzle Factory With Good Defaults", @@ -1179,7 +1375,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Guzzle-Factory/issues", - "source": "https://github.com/GrahamCampbell/Guzzle-Factory/tree/v5.0.0" + "source": "https://github.com/GrahamCampbell/Guzzle-Factory/tree/v5.0.2" }, "funding": [ { @@ -1191,7 +1387,7 @@ "type": "tidelift" } ], - "time": "2021-01-24T20:39:09+00:00" + "time": "2021-10-17T19:48:29+00:00" }, { "name": "graham-campbell/manager", @@ -1264,31 +1460,26 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.0.1", + "version": "v1.0.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" + "reference": "296c015dc30ec4322168c5ad3ee5cc11dae827ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/296c015dc30ec4322168c5ad3ee5cc11dae827ac", + "reference": "296c015dc30ec4322168c5ad3ee5cc11dae827ac", "shasum": "" }, "require": { - "php": "^7.0|^8.0", - "phpoption/phpoption": "^1.7.3" + "php": "^7.0 || ^8.0", + "phpoption/phpoption": "^1.8" }, "require-dev": { - "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { "psr-4": { "GrahamCampbell\\ResultType\\": "src/" @@ -1301,7 +1492,7 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk" } ], "description": "An Implementation Of The Result Type", @@ -1314,7 +1505,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.3" }, "funding": [ { @@ -1326,28 +1517,29 @@ "type": "tidelift" } ], - "time": "2020-04-13T13:17:36+00:00" + "time": "2021-10-17T19:48:54+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.3.0", + "version": "7.4.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7008573787b430c1c1f650e3722d9bba59967628" + "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", - "reference": "7008573787b430c1c1f650e3722d9bba59967628", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/868b3571a039f0ebc11ac8f344f4080babe2cb94", + "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.7 || ^2.0", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0" + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2" }, "provide": { "psr/http-client-implementation": "1.0" @@ -1357,7 +1549,7 @@ "ext-curl": "*", "php-http/client-integration-tests": "^3.0", "phpunit/phpunit": "^8.5.5 || ^9.3.5", - "psr/log": "^1.1" + "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { "ext-curl": "Required for CURL handler support", @@ -1367,7 +1559,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.3-dev" + "dev-master": "7.4-dev" } }, "autoload": { @@ -1383,19 +1575,43 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, { "name": "Márk Sági-Kazár", "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", @@ -1409,7 +1625,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.3.0" + "source": "https://github.com/guzzle/guzzle/tree/7.4.0" }, "funding": [ { @@ -1421,28 +1637,24 @@ "type": "github" }, { - "url": "https://github.com/alexeyshockov", - "type": "github" - }, - { - "url": "https://github.com/gmponos", - "type": "github" + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" } ], - "time": "2021-03-23T11:33:13+00:00" + "time": "2021-10-18T09:52:00+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.4.1", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", "shasum": "" }, "require": { @@ -1454,7 +1666,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -1470,10 +1682,25 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle promises library", @@ -1482,35 +1709,52 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.1" + "source": "https://github.com/guzzle/promises/tree/1.5.1" }, - "time": "2021-03-07T09:25:29+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.8.2", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91" + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" }, "provide": { + "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1518,30 +1762,53 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "2.1-dev" } }, "autoload": { "psr-4": { "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, { "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "PSR-7 message implementation that also provides common utility methods", @@ -1557,9 +1824,74 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.2" + "source": "https://github.com/guzzle/psr7/tree/2.1.0" }, - "time": "2021-04-26T09:17:50+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2021-10-06T17:43:30+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" }, { "name": "hashids/hashids", @@ -1631,28 +1963,104 @@ }, "time": "2020-11-26T19:24:33+00:00" }, + { + "name": "innocenzi/laravel-vite", + "version": "0.1.18", + "source": { + "type": "git", + "url": "https://github.com/innocenzi/laravel-vite.git", + "reference": "62e50bee77e4f0706667fa4192bf33b829c1f13d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/innocenzi/laravel-vite/zipball/62e50bee77e4f0706667fa4192bf33b829c1f13d", + "reference": "62e50bee77e4f0706667fa4192bf33b829c1f13d", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^7.2", + "illuminate/contracts": "^8.0", + "php": "^7.4|^8.0", + "spatie/laravel-package-tools": "^1.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2.1", + "orchestra/testbench": "^6.0", + "pestphp/pest": "^1.20.0", + "phpunit/phpunit": "^9.3", + "symfony/process": "^5.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Innocenzi\\Vite\\ViteServiceProvider" + ], + "aliases": { + "Vite": "Innocenzi\\Vite\\ViteFacade" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Innocenzi\\Vite\\": "src", + "Innocenzi\\Vite\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Enzo Innocenzi", + "email": "enzo@innocenzi.dev", + "role": "Developer" + } + ], + "description": "Vite integration for Laravel", + "homepage": "https://github.com/innocenzi/laravel-vite", + "keywords": [ + "innocenzi", + "laravel-vite" + ], + "support": { + "issues": "https://github.com/innocenzi/laravel-vite/issues", + "source": "https://github.com/innocenzi/laravel-vite/tree/0.1.18" + }, + "funding": [ + { + "url": "https://github.com/innocenzi", + "type": "github" + } + ], + "time": "2021-11-03T13:35:14+00:00" + }, { "name": "intervention/image", - "version": "2.5.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e" + "reference": "9a8cc99d30415ec0b3f7649e1647d03a55698545" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", + "url": "https://api.github.com/repos/Intervention/image/zipball/9a8cc99d30415ec0b3f7649e1647d03a55698545", + "reference": "9a8cc99d30415ec0b3f7649e1647d03a55698545", "shasum": "" }, "require": { "ext-fileinfo": "*", - "guzzlehttp/psr7": "~1.1", + "guzzlehttp/psr7": "~1.1 || ^2.0", "php": ">=5.4.0" }, "require-dev": { "mockery/mockery": "~0.9.2", - "phpunit/phpunit": "^4.8 || ^5.7" + "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" }, "suggest": { "ext-gd": "to use GD library based image processing.", @@ -1701,22 +2109,82 @@ ], "support": { "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/master" + "source": "https://github.com/Intervention/image/tree/2.7.0" + }, + "funding": [ + { + "url": "https://www.paypal.me/interventionphp", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], + "time": "2021-10-03T14:17:12+00:00" + }, + { + "name": "jasonmccreary/laravel-test-assertions", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/jasonmccreary/laravel-test-assertions.git", + "reference": "f70f51ed7cdb7d5818d927522401d8ccc467fa25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jasonmccreary/laravel-test-assertions/zipball/f70f51ed7cdb7d5818d927522401d8ccc467fa25", + "reference": "f70f51ed7cdb7d5818d927522401d8ccc467fa25", + "shasum": "" + }, + "require": { + "illuminate/testing": "^8.0", + "mockery/mockery": "^1.4.2", + "php": ">=7.3", + "phpunit/phpunit": "^9.3.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "JMac\\Testing\\AdditionalAssertionsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "JMac\\Testing\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jason McCreary", + "email": "jason@pureconcepts.net" + } + ], + "description": "A set of helpful assertions when testing Laravel applications.", + "support": { + "issues": "https://github.com/jasonmccreary/laravel-test-assertions/issues", + "source": "https://github.com/jasonmccreary/laravel-test-assertions/tree/v2.0.0" }, - "time": "2019-11-02T09:15:47+00:00" + "time": "2021-09-28T18:47:10+00:00" }, { "name": "laravel/framework", - "version": "v8.48.1", + "version": "v8.70.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "edc138060a13c9e5f15c005fad5f6a39b4ccf5fa" + "reference": "dec9524cd0f9fa35a6eb8e25d0b40f8bbc8ec225" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/edc138060a13c9e5f15c005fad5f6a39b4ccf5fa", - "reference": "edc138060a13c9e5f15c005fad5f6a39b4ccf5fa", + "url": "https://api.github.com/repos/laravel/framework/zipball/dec9524cd0f9fa35a6eb8e25d0b40f8bbc8ec225", + "reference": "dec9524cd0f9fa35a6eb8e25d0b40f8bbc8ec225", "shasum": "" }, "require": { @@ -1726,16 +2194,18 @@ "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "league/commonmark": "^1.3", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^1.3|^2.0.2", "league/flysystem": "^1.1", "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.31", + "nesbot/carbon": "^2.53.1", "opis/closure": "^3.6", "php": "^7.3|^8.0", "psr/container": "^1.0", + "psr/log": "^1.0 || ^2.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^4.0", - "swiftmailer/swiftmailer": "^6.0", + "ramsey/uuid": "^4.2.2", + "swiftmailer/swiftmailer": "^6.3", "symfony/console": "^5.1.4", "symfony/error-handler": "^5.1.4", "symfony/finder": "^5.1.4", @@ -1753,7 +2223,8 @@ "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" }, "replace": { "illuminate/auth": "self.version", @@ -1789,22 +2260,23 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.155", - "doctrine/dbal": "^2.6|^3.0", - "filp/whoops": "^2.8", + "aws/aws-sdk-php": "^3.198.1", + "doctrine/dbal": "^2.13.3|^3.1.2", + "filp/whoops": "^2.14.3", "guzzlehttp/guzzle": "^6.5.5|^7.0.1", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.2", + "mockery/mockery": "^1.4.4", "orchestra/testbench-core": "^6.23", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.8|^9.3.3", - "predis/predis": "^1.1.2", + "phpunit/phpunit": "^8.5.19|^9.5.8", + "predis/predis": "^1.1.9", "symfony/cache": "^5.1.4" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.2).", + "ext-bcmath": "Required to use the multiple_of validation rule.", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", @@ -1812,17 +2284,17 @@ "ext-posix": "Required to use all features of the queue worker.", "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.8).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (^1.4.2).", + "mockery/mockery": "Required to use mocking (^1.4.4).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^8.5.8|^9.3.3).", - "predis/predis": "Required to use the predis connector (^1.1.2).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0).", "symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).", @@ -1871,7 +2343,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-06-23T13:41:59+00:00" + "time": "2021-11-09T22:48:33+00:00" }, { "name": "laravel/helpers", @@ -1931,16 +2403,16 @@ }, { "name": "laravel/sanctum", - "version": "v2.11.2", + "version": "v2.12.1", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "b21e65cbe13896946986cb0868180cd69e1bd5d3" + "reference": "e610647b04583ace6b30c8eb74cee0a866040420" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/b21e65cbe13896946986cb0868180cd69e1bd5d3", - "reference": "b21e65cbe13896946986cb0868180cd69e1bd5d3", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/e610647b04583ace6b30c8eb74cee0a866040420", + "reference": "e610647b04583ace6b30c8eb74cee0a866040420", "shasum": "" }, "require": { @@ -1991,20 +2463,79 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2021-06-15T15:56:21+00:00" + "time": "2021-10-26T18:23:26+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "6cfc678735f22ccedad761b8cae2bab14c3d8e5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/6cfc678735f22ccedad761b8cae2bab14c3d8e5b", + "reference": "6cfc678735f22ccedad761b8cae2bab14c3d8e5b", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.18", + "phpstan/phpstan": "^0.12.98", + "symfony/var-dumper": "^5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2021-10-07T14:00:57+00:00" }, { "name": "laravel/tinker", - "version": "v2.6.1", + "version": "v2.6.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "04ad32c1a3328081097a181875733fa51f402083" + "reference": "c808a7227f97ecfd9219fbf913bad842ea854ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/04ad32c1a3328081097a181875733fa51f402083", - "reference": "04ad32c1a3328081097a181875733fa51f402083", + "url": "https://api.github.com/repos/laravel/tinker/zipball/c808a7227f97ecfd9219fbf913bad842ea854ddc", + "reference": "c808a7227f97ecfd9219fbf913bad842ea854ddc", "shasum": "" }, "require": { @@ -2057,22 +2588,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.6.1" + "source": "https://github.com/laravel/tinker/tree/v2.6.2" }, - "time": "2021-03-02T16:53:12+00:00" + "time": "2021-09-28T15:47:34+00:00" }, { "name": "laravel/ui", - "version": "v3.3.0", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "07d725813350c695c779382cbd6dac0ab8665537" + "reference": "28f3d190fe270b6dcd6fdab4a77a392e693ceca5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/07d725813350c695c779382cbd6dac0ab8665537", - "reference": "07d725813350c695c779382cbd6dac0ab8665537", + "url": "https://api.github.com/repos/laravel/ui/zipball/28f3d190fe270b6dcd6fdab4a77a392e693ceca5", + "reference": "28f3d190fe270b6dcd6fdab4a77a392e693ceca5", "shasum": "" }, "require": { @@ -2115,48 +2646,113 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v3.3.0" + "source": "https://github.com/laravel/ui/tree/v3.3.2" + }, + "time": "2021-11-05T08:25:44+00:00" + }, + { + "name": "lavary/laravel-menu", + "version": "v1.8.3", + "source": { + "type": "git", + "url": "https://github.com/lavary/laravel-menu.git", + "reference": "4f14cb9b11cfcd9839d1d87c806632c84a94d3be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lavary/laravel-menu/zipball/4f14cb9b11cfcd9839d1d87c806632c84a94d3be", + "reference": "4f14cb9b11cfcd9839d1d87c806632c84a94d3be", + "shasum": "" + }, + "require": { + "illuminate/support": ">=5.0", + "illuminate/view": ">=5.0", + "php": ">=5.4.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Lavary\\Menu\\ServiceProvider" + ], + "aliases": { + "Menu": "Lavary\\Menu\\Facade" + } + } + }, + "autoload": { + "psr-0": { + "Lavary\\Menu\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lavary", + "email": "mrl.8081@gmail.com" + } + ], + "description": "A quick way to create menus in Laravel 5", + "homepage": "https://github.com/lavary/laravel-menu", + "keywords": [ + "laravel" + ], + "support": { + "issues": "https://github.com/lavary/laravel-menu/issues", + "source": "https://github.com/lavary/laravel-menu/tree/v1.8.3" }, - "time": "2021-05-25T16:45:33+00:00" + "time": "2021-02-22T16:41:26+00:00" }, { "name": "league/commonmark", - "version": "1.6.4", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "c3c8b7217c52572fb42aaf84211abccf75a151b2" + "reference": "2df87709f44b0dd733df86aef0830dce9b1f0f13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c3c8b7217c52572fb42aaf84211abccf75a151b2", - "reference": "c3c8b7217c52572fb42aaf84211abccf75a151b2", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2df87709f44b0dd733df86aef0830dce9b1f0f13", + "reference": "2df87709f44b0dd733df86aef0830dce9b1f0f13", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "scrutinizer/ocular": "1.7.*" + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.29.2", - "erusev/parsedown": "~1.0", + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", - "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "^1.4", - "phpstan/phpstan": "^0.12.90", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", - "scrutinizer/ocular": "^1.5", - "symfony/finder": "^4.2" + "michelf/php-markdown": "^1.4", + "phpstan/phpstan": "^0.12.88", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" }, - "bin": [ - "bin/commonmark" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.1-dev" + } + }, "autoload": { "psr-4": { "League\\CommonMark\\": "src" @@ -2174,7 +2770,7 @@ "role": "Lead Developer" } ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", "homepage": "https://commonmark.thephpleague.com", "keywords": [ "commonmark", @@ -2188,6 +2784,7 @@ ], "support": { "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", "issues": "https://github.com/thephpleague/commonmark/issues", "rss": "https://github.com/thephpleague/commonmark/releases.atom", "source": "https://github.com/thephpleague/commonmark" @@ -2218,29 +2815,111 @@ "type": "tidelift" } ], - "time": "2021-06-19T20:08:14+00:00" + "time": "2021-08-14T14:06:04+00:00" }, { - "name": "league/flysystem", - "version": "1.1.4", + "name": "league/config", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32" + "url": "https://github.com/thephpleague/config.git", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" + "require-dev": { + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2021-08-14T12:15:32+00:00" + }, + { + "name": "league/flysystem", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/18634df356bfd4119fe3d6156bdb990c414c14ea", + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" }, "require-dev": { "phpspec/prophecy": "^1.11.1", @@ -2304,7 +2983,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.4" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.5" }, "funding": [ { @@ -2312,7 +2991,7 @@ "type": "other" } ], - "time": "2021-06-23T21:56:05+00:00" + "time": "2021-08-17T13:49:42+00:00" }, { "name": "league/flysystem-aws-s3-v3", @@ -2432,16 +3111,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" + "reference": "b38b25d7b372e9fddb00335400467b223349fd7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b38b25d7b372e9fddb00335400467b223349fd7e", + "reference": "b38b25d7b372e9fddb00335400467b223349fd7e", "shasum": "" }, "require": { @@ -2472,7 +3151,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.8.0" }, "funding": [ { @@ -2484,7 +3163,7 @@ "type": "tidelift" } ], - "time": "2021-01-18T20:58:21+00:00" + "time": "2021-09-25T08:23:19+00:00" }, { "name": "maennchen/zipstream-php", @@ -2557,26 +3236,98 @@ ], "time": "2020-05-30T13:11:16+00:00" }, + { + "name": "mockery/mockery", + "version": "1.4.4", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e01123a0e847d52d186c5eb4b9bf58b0c6d00346", + "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.4.4" + }, + "time": "2021-09-13T15:28:59+00:00" + }, { "name": "monolog/monolog", - "version": "2.2.0", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", "shasum": "" }, "require": { "php": ">=7.2", - "psr/log": "^1.0.1" + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0" + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" }, "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", @@ -2584,14 +3335,14 @@ "elasticsearch/elasticsearch": "^7", "graylog2/gelf-php": "^1.4.2", "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4", + "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.3", "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.59", + "phpstan/phpstan": "^0.12.91", "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90 <7.0.1", + "ruflin/elastica": ">=0.90@dev", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { @@ -2599,8 +3350,11 @@ "doctrine/couchdb": "Allow sending log messages to a CouchDB server", "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", "ext-mbstring": "Allow to work properly with unicode symbols", "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", @@ -2639,7 +3393,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + "source": "https://github.com/Seldaek/monolog/tree/2.3.5" }, "funding": [ { @@ -2651,7 +3405,7 @@ "type": "tidelift" } ], - "time": "2020-12-14T13:15:25+00:00" + "time": "2021-10-01T21:08:31+00:00" }, { "name": "mtdowling/jmespath.php", @@ -2714,18 +3468,76 @@ }, "time": "2021-06-14T00:11:39+00:00" }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, { "name": "myclabs/php-enum", - "version": "1.8.0", + "version": "1.8.3", "source": { "type": "git", "url": "https://github.com/myclabs/php-enum.git", - "reference": "46cf3d8498b095bd33727b13fd5707263af99421" + "reference": "b942d263c641ddb5190929ff840c68f78713e937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/php-enum/zipball/46cf3d8498b095bd33727b13fd5707263af99421", - "reference": "46cf3d8498b095bd33727b13fd5707263af99421", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/b942d263c641ddb5190929ff840c68f78713e937", + "reference": "b942d263c641ddb5190929ff840c68f78713e937", "shasum": "" }, "require": { @@ -2735,7 +3547,7 @@ "require-dev": { "phpunit/phpunit": "^9.5", "squizlabs/php_codesniffer": "1.*", - "vimeo/psalm": "^4.5.1" + "vimeo/psalm": "^4.6.2" }, "type": "library", "autoload": { @@ -2760,7 +3572,7 @@ ], "support": { "issues": "https://github.com/myclabs/php-enum/issues", - "source": "https://github.com/myclabs/php-enum/tree/1.8.0" + "source": "https://github.com/myclabs/php-enum/tree/1.8.3" }, "funding": [ { @@ -2772,31 +3584,33 @@ "type": "tidelift" } ], - "time": "2021-02-15T16:11:48+00:00" + "time": "2021-07-05T08:18:36+00:00" }, { "name": "nesbot/carbon", - "version": "2.49.0", + "version": "2.54.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "93d9db91c0235c486875d22f1e08b50bdf3e6eee" + "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/93d9db91c0235c486875d22f1e08b50bdf3e6eee", - "reference": "93d9db91c0235c486875d22f1e08b50bdf3e6eee", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/eed83939f1aed3eee517d03a33f5ec587ac529b5", + "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { + "doctrine/dbal": "^2.0 || ^3.0", "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", @@ -2810,8 +3624,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", - "dev-3.x": "3.x-dev" + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" }, "laravel": { "providers": [ @@ -2837,15 +3651,15 @@ { "name": "Brian Nesbitt", "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "homepage": "https://markido.com" }, { "name": "kylekatarnls", - "homepage": "http://github.com/kylekatarnls" + "homepage": "https://github.com/kylekatarnls" } ], "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "http://carbon.nesbot.com", + "homepage": "https://carbon.nesbot.com", "keywords": [ "date", "datetime", @@ -2865,459 +3679,499 @@ "type": "tidelift" } ], - "time": "2021-06-02T07:31:40+00:00" + "time": "2021-11-01T21:22:20+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.10.5", + "name": "nette/schema", + "version": "v1.2.2", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" + "url": "https://github.com/nette/schema.git", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", + "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.0" + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.2" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^0.12", + "tracy/tracy": "^2.7" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "1.2-dev" } }, "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { - "name": "Nikita Popov" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "A PHP parser written in PHP", + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", "keywords": [ - "parser", - "php" + "config", + "nette" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.2" }, - "time": "2021-05-03T19:11:20+00:00" + "time": "2021-10-15T11:40:02+00:00" }, { - "name": "opis/closure", - "version": "3.6.2", + "name": "nette/utils", + "version": "v3.2.5", "source": { "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" + "url": "https://github.com/nette/utils.git", + "reference": "9cd80396ca58d7969ab44fc7afcf03624dfa526e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", + "url": "https://api.github.com/repos/nette/utils/zipball/9cd80396ca58d7969ab44fc7afcf03624dfa526e", + "reference": "9cd80396ca58d7969ab44fc7afcf03624dfa526e", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0 || ^8.0" + "php": ">=7.2 <8.2" + }, + "conflict": { + "nette/di": "<3.0.6" }, "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + "nette/tester": "~2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.6.x-dev" + "dev-master": "3.2-dev" } }, "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" }, { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.5" }, - "time": "2021-04-09T13:42:10+00:00" + "time": "2021-09-20T10:50:11+00:00" }, { - "name": "phenx/php-font-lib", - "version": "0.5.2", + "name": "nikic/php-parser", + "version": "v4.13.1", "source": { "type": "git", - "url": "https://github.com/PhenX/php-font-lib.git", - "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", - "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/63a79e8daa781cac14e5195e63ed8ae231dd10fd", + "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd", "shasum": "" }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, "autoload": { "psr-4": { - "FontLib\\": "src/FontLib" + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" + "name": "Nikita Popov" } ], - "description": "A library to read, parse, export and make subsets of different types of font files.", - "homepage": "https://github.com/PhenX/php-font-lib", + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], "support": { - "issues": "https://github.com/PhenX/php-font-lib/issues", - "source": "https://github.com/PhenX/php-font-lib/tree/0.5.2" + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.1" }, - "time": "2020-03-08T15:31:32+00:00" + "time": "2021-11-03T20:52:16+00:00" }, { - "name": "phenx/php-svg-lib", - "version": "v0.3.3", + "name": "opis/closure", + "version": "3.6.2", "source": { "type": "git", - "url": "https://github.com/PhenX/php-svg-lib.git", - "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32" + "url": "https://github.com/opis/closure.git", + "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", - "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", + "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", "shasum": "" }, "require": { - "sabberworm/php-css-parser": "^8.3" + "php": "^5.4 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^5.5|^6.5" + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, "autoload": { "psr-4": { - "Svg\\": "src/Svg" - } + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "MIT" ], "authors": [ { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" } ], - "description": "A library to read, parse and export to PDF SVG files.", - "homepage": "https://github.com/PhenX/php-svg-lib", + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], "support": { - "issues": "https://github.com/PhenX/php-svg-lib/issues", - "source": "https://github.com/PhenX/php-svg-lib/tree/master" + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.2" }, - "time": "2019-09-11T20:02:13+00:00" + "time": "2021-04-09T13:42:10+00:00" }, { - "name": "phpoption/phpoption", - "version": "1.7.5", + "name": "phar-io/manifest", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "BSD-3-Clause" ], "authors": [ { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "time": "2020-07-20T17:29:33+00:00" + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" }, { - "name": "psr/container", - "version": "1.1.1", + "name": "phar-io/version", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], + "description": "Library for handling version information and constraints", "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2021-03-05T17:36:06+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "phenx/php-font-lib", + "version": "0.5.2", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/PhenX/php-font-lib.git", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", "shasum": "" }, - "require": { - "php": ">=7.2.0" + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Psr\\EventDispatcher\\": "src/" + "FontLib\\": "src/FontLib" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" } ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "issues": "https://github.com/PhenX/php-font-lib/issues", + "source": "https://github.com/PhenX/php-font-lib/tree/0.5.2" }, - "time": "2019-01-08T18:20:26+00:00" + "time": "2020-03-08T15:31:32+00:00" }, { - "name": "psr/http-client", - "version": "1.0.1", + "name": "phenx/php-svg-lib", + "version": "0.3.4", "source": { "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "url": "https://github.com/PhenX/php-svg-lib.git", + "reference": "f627771eb854aa7f45f80add0f23c6c4d67ea0f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/f627771eb854aa7f45f80add0f23c6c4d67ea0f2", + "reference": "f627771eb854aa7f45f80add0f23c6c4d67ea0f2", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "php": "^7.4 || ^8.0", + "sabberworm/php-css-parser": "^8.3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "phpunit/phpunit": "^9.5" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Http\\Client\\": "src/" + "Svg\\": "src/Svg" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" } ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "issues": "https://github.com/PhenX/php-svg-lib/issues", + "source": "https://github.com/PhenX/php-svg-lib/tree/0.3.4" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2021-10-18T02:13:32+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3326,51 +4180,59 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { - "name": "psr/log", - "version": "1.1.4", + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3379,48 +4241,52 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { - "name": "psr/simple-cache", - "version": "1.0.1", + "name": "phpdocumentor/type-resolver", + "version": "1.5.1", "source": { "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { - "Psr\\SimpleCache\\": "src/" + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3429,124 +4295,121 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" }, - "time": "2017-10-23T01:57:42+00:00" + "time": "2021-10-02T14:08:47+00:00" }, { - "name": "psy/psysh", - "version": "v0.10.8", + "name": "phpoption/phpoption", + "version": "1.8.0", "source": { "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "e4573f47750dd6c92dca5aee543fa77513cbd8d3" + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "5455cb38aed4523f99977c4a12ef19da4bfe2a28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e4573f47750dd6c92dca5aee543fa77513cbd8d3", - "reference": "e4573f47750dd6c92dca5aee543fa77513cbd8d3", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/5455cb38aed4523f99977c4a12ef19da4bfe2a28", + "reference": "5455cb38aed4523f99977c4a12ef19da4bfe2a28", "shasum": "" }, "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", - "php": "^8.0 || ^7.0 || ^5.5.9", - "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", - "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" + "php": "^7.0 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.*" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^6.5.14 || ^7.0.20 || ^8.5.19 || ^9.5.8" }, - "bin": [ - "bin/psysh" - ], "type": "library", "extra": { "branch-alias": { - "dev-main": "0.10.x-dev" + "dev-master": "1.8-dev" } }, "autoload": { - "files": [ - "src/functions.php" - ], "psr-4": { - "Psy\\": "src/" + "PhpOption\\": "src/PhpOption/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" ], "authors": [ { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk" } ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "description": "Option Type for PHP", "keywords": [ - "REPL", - "console", - "interactive", - "shell" + "language", + "option", + "php", + "type" ], "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.10.8" + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.8.0" }, - "time": "2021-04-10T16:23:39+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2021-08-28T21:27:29+00:00" }, { - "name": "ralouphie/getallheaders", - "version": "3.0.3", + "name": "phpspec/prophecy", + "version": "1.14.0", "source": { "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", "shasum": "" }, "require": { - "php": ">=5.6" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, "autoload": { - "files": [ - "src/getallheaders.php" - ] + "psr-4": { + "Prophecy\\": "src/Prophecy" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3554,455 +4417,473 @@ ], "authors": [ { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" } ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "ramsey/collection", - "version": "1.1.3", + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.14.0" + }, + "time": "2021-09-10T09:02:12+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.8", "source": { "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "cf04e88a2e3c56fc1a65488afd493325b4c1bc3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/cf04e88a2e3c56fc1a65488afd493325b4c1bc3e", + "reference": "cf04e88a2e3c56fc1a65488afd493325b4c1bc3e", "shasum": "" }, "require": { - "php": "^7.2 || ^8" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A PHP 7.2+ library for representing and manipulating collections.", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" + "coverage", + "testing", + "xunit" ], "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.1.3" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.8" }, "funding": [ { - "url": "https://github.com/ramsey", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" } ], - "time": "2021-01-21T17:40:04+00:00" + "time": "2021-10-30T08:01:38+00:00" }, { - "name": "ramsey/uuid", - "version": "4.1.1", + "name": "phpunit/php-file-iterator", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "cd4032040a750077205918c86049aa0f43d22947" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", - "reference": "cd4032040a750077205918c86049aa0f43d22947", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", - "ext-json": "*", - "php": "^7.2 || ^8", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8" - }, - "replace": { - "rhumsaa/uuid": "self.version" + "php": ">=7.3" }, "require-dev": { - "codeception/aspect-mock": "^3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", - "doctrine/annotations": "^1.8", - "goaop/framework": "^2", - "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", - "paragonie/random-lib": "^2", - "php-mock/php-mock-mockery": "^1.3", - "php-mock/php-mock-phpunit": "^2.5", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^0.17.1", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^8.5", - "psy/psysh": "^0.10.0", - "slevomat/coding-standard": "^6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "3.9.4" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, - "files": [ - "src/functions.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "homepage": "https://github.com/ramsey/uuid", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "guid", - "identifier", - "uuid" + "filesystem", + "iterator" ], "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "rss": "https://github.com/ramsey/uuid/releases.atom", - "source": "https://github.com/ramsey/uuid" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" }, "funding": [ { - "url": "https://github.com/ramsey", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-08-18T17:17:46+00:00" + "time": "2020-09-28T05:57:25+00:00" }, { - "name": "sabberworm/php-css-parser", - "version": "8.3.1", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": ">=7.3" }, "require-dev": { - "codacy/coverage": "^1.4", - "phpunit/phpunit": "~4.8" + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", - "autoload": { - "psr-0": { - "Sabberworm\\CSS": "lib/" + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Raphael Schweikert" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Parser for CSS Files written in PHP", - "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "css", - "parser", - "stylesheet" + "process" ], "support": { - "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", - "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" }, - "time": "2020-06-01T09:10:00+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "spatie/db-dumper", - "version": "2.21.1", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/spatie/db-dumper.git", - "reference": "05e5955fb882008a8947c5a45146d86cfafa10d1" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/db-dumper/zipball/05e5955fb882008a8947c5a45146d86cfafa10d1", - "reference": "05e5955fb882008a8947c5a45146d86cfafa10d1", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "symfony/process": "^4.2|^5.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0|^8.0|^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", - "autoload": { - "psr-4": { - "Spatie\\DbDumper\\": "src" + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Dump databases", - "homepage": "https://github.com/spatie/db-dumper", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "database", - "db-dumper", - "dump", - "mysqldump", - "spatie" + "template" ], "support": { - "issues": "https://github.com/spatie/db-dumper/issues", - "source": "https://github.com/spatie/db-dumper/tree/2.21.1" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" }, "funding": [ { - "url": "https://github.com/spatie", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2021-02-24T14:56:42+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "spatie/dropbox-api", - "version": "1.19.0", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/spatie/dropbox-api.git", - "reference": "22ed7792e7ede170520f030e32ff0edde2337842" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/dropbox-api/zipball/22ed7792e7ede170520f030e32ff0edde2337842", - "reference": "22ed7792e7ede170520f030e32ff0edde2337842", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "graham-campbell/guzzle-factory": "^3.0||^4.0||^5.0", - "guzzlehttp/guzzle": "^6.2||^7.0", - "php": "^7.1||^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5.15|^8.5|^9.3" + "phpunit/phpunit": "^9.3" }, "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Dropbox\\": "src" + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Alex Vanderbist", - "email": "alex.vanderbist@gmail.com", - "homepage": "https://spatie.be", - "role": "Developer" - }, - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A minimal implementation of Dropbox API v2", - "homepage": "https://github.com/spatie/dropbox-api", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "Dropbox-API", - "api", - "dropbox", - "spatie", - "v2" + "timer" ], "support": { - "issues": "https://github.com/spatie/dropbox-api/issues", - "source": "https://github.com/spatie/dropbox-api/tree/1.19.0" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, "funding": [ { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2021-06-18T06:34:17+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { - "name": "spatie/flysystem-dropbox", - "version": "1.2.3", + "name": "phpunit/phpunit", + "version": "9.5.10", "source": { "type": "git", - "url": "https://github.com/spatie/flysystem-dropbox.git", - "reference": "8b6b072f217343b875316ca6a4203dd59f04207a" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flysystem-dropbox/zipball/8b6b072f217343b875316ca6a4203dd59f04207a", - "reference": "8b6b072f217343b875316ca6a4203dd59f04207a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", "shasum": "" }, "require": { - "league/flysystem": "^1.0.20", - "php": "^7.0 || ^8.0", - "spatie/dropbox-api": "^1.1.0" + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3.4", + "sebastian/version": "^3.0.2" }, "require-dev": { - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.11 || ^9.4.3" + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" }, + "bin": [ + "phpunit" + ], "type": "library", - "autoload": { - "psr-4": { - "Spatie\\FlysystemDropbox\\": "src" + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" } }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Alex Vanderbist", - "email": "alex.vanderbist@gmail.com", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Flysystem Adapter for the Dropbox v2 API", - "homepage": "https://github.com/spatie/flysystem-dropbox", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "Flysystem", - "api", - "dropbox", - "flysystem-dropbox", - "spatie", - "v2" + "phpunit", + "testing", + "xunit" ], "support": { - "issues": "https://github.com/spatie/flysystem-dropbox/issues", - "source": "https://github.com/spatie/flysystem-dropbox/tree/1.2.3" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" }, - "time": "2020-11-28T22:17:09+00:00" + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-09-25T07:38:51+00:00" }, { - "name": "spatie/image", - "version": "1.10.5", + "name": "psr/container", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/spatie/image.git", - "reference": "63a963d0200fb26f2564bf7201fc7272d9b22933" + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image/zipball/63a963d0200fb26f2564bf7201fc7272d9b22933", - "reference": "63a963d0200fb26f2564bf7201fc7272d9b22933", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "ext-exif": "*", - "ext-json": "*", - "ext-mbstring": "*", - "league/glide": "^1.6", - "php": "^7.2|^8.0", - "spatie/image-optimizer": "^1.1", - "spatie/temporary-directory": "^1.0|^2.0", - "symfony/process": "^3.0|^4.0|^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0|^9.0", - "symfony/var-dumper": "^4.0|^5.0", - "vimeo/psalm": "^4.6" + "php": ">=7.4.0" }, "type": "library", "autoload": { "psr-4": { - "Spatie\\Image\\": "src" + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4011,62 +4892,51 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Manipulate images with an expressive API", - "homepage": "https://github.com/spatie/image", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "image", - "spatie" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], "support": { - "issues": "https://github.com/spatie/image/issues", - "source": "https://github.com/spatie/image/tree/1.10.5" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2021-04-07T08:42:24+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { - "name": "spatie/image-optimizer", - "version": "1.4.0", + "name": "psr/event-dispatcher", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/spatie/image-optimizer.git", - "reference": "c22202fdd57856ed18a79cfab522653291a6e96a" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/c22202fdd57856ed18a79cfab522653291a6e96a", - "reference": "c22202fdd57856ed18a79cfab522653291a6e96a", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "php": "^7.2|^8.0", - "psr/log": "^1.0", - "symfony/process": "^4.2|^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0|^9.0", - "symfony/var-dumper": "^4.2|^5.0" + "php": ">=7.2.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { - "Spatie\\ImageOptimizer\\": "src" + "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4075,77 +4945,50 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Easily optimize images using PHP", - "homepage": "https://github.com/spatie/image-optimizer", + "description": "Standard interfaces for event handling.", "keywords": [ - "image-optimizer", - "spatie" + "events", + "psr", + "psr-14" ], "support": { - "issues": "https://github.com/spatie/image-optimizer/issues", - "source": "https://github.com/spatie/image-optimizer/tree/1.4.0" + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" }, - "time": "2021-04-22T06:17:27+00:00" + "time": "2019-01-08T18:20:26+00:00" }, { - "name": "spatie/laravel-backup", - "version": "6.16.0", + "name": "psr/http-client", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/spatie/laravel-backup.git", - "reference": "6b2229a07d92c2bb146ad9c5223fc32e9d74830c" + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/6b2229a07d92c2bb146ad9c5223fc32e9d74830c", - "reference": "6b2229a07d92c2bb146ad9c5223fc32e9d74830c", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", "shasum": "" }, "require": { - "ext-zip": "^1.14.0", - "illuminate/console": "^6.0|^7.0|^8.0", - "illuminate/contracts": "^6.0|^7.0|^8.0", - "illuminate/events": "^6.0|^7.0|^8.0", - "illuminate/filesystem": "^6.0|^7.0|^8.0", - "illuminate/notifications": "^6.0|^7.0|^8.0", - "illuminate/support": "^6.0|^7.0|^8.0", - "league/flysystem": "^1.0.49", - "php": "^7.3|^8.0", - "spatie/db-dumper": "^2.12", - "spatie/temporary-directory": "^1.1", - "symfony/finder": "^4.2|^5.0" - }, - "require-dev": { - "laravel/slack-notification-channel": "^2.3", - "league/flysystem-aws-s3-v3": "^1.0", - "mockery/mockery": "^1.4.2", - "orchestra/testbench": "4.*|5.*|6.*", - "phpunit/phpunit": "^8.4|^9.0" - }, - "suggest": { - "laravel/slack-notification-channel": "Required for sending notifications via Slack" + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "Spatie\\Backup\\BackupServiceProvider" - ] + "branch-alias": { + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Spatie\\Backup\\": "src" - }, - "files": [ - "src/Helpers/functions.php" - ] + "Psr\\Http\\Client\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4153,98 +4996,50 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A Laravel package to backup your application", - "homepage": "https://github.com/spatie/laravel-backup", + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ - "backup", - "database", - "laravel-backup", - "spatie" + "http", + "http-client", + "psr", + "psr-18" ], "support": { - "issues": "https://github.com/spatie/laravel-backup/issues", - "source": "https://github.com/spatie/laravel-backup/tree/6.16.0" + "source": "https://github.com/php-fig/http-client/tree/master" }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2021-04-15T09:31:32+00:00" + "time": "2020-06-29T06:28:15+00:00" }, { - "name": "spatie/laravel-medialibrary", - "version": "8.10.2", + "name": "psr/http-factory", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/spatie/laravel-medialibrary.git", - "reference": "448e8389cadc79f42c3c96c7c9491b57015702d4" + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/448e8389cadc79f42c3c96c7c9491b57015702d4", - "reference": "448e8389cadc79f42c3c96c7c9491b57015702d4", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "ext-json": "*", - "illuminate/bus": "^6.18|^7.0|^8.0", - "illuminate/console": "^6.18|^7.0|^8.0", - "illuminate/database": "^6.18|^7.0|^8.0", - "illuminate/pipeline": "^6.18|^7.0|^8.0", - "illuminate/support": "^6.18|^7.0|^8.0", - "league/flysystem": "^1.0.64", - "maennchen/zipstream-php": "^1.0|^2.0", - "php": "^7.4|^8.0", - "spatie/image": "^1.4.0", - "spatie/temporary-directory": "^1.1", - "symfony/console": "^4.4|^5.0" - }, - "conflict": { - "php-ffmpeg/php-ffmpeg": "<0.6.1" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.133.11", - "doctrine/dbal": "^2.5.2", - "ext-pdo_sqlite": "*", - "ext-zip": "*", - "guzzlehttp/guzzle": "^6.3|^7.0", - "league/flysystem-aws-s3-v3": "^1.0.23", - "mockery/mockery": "^1.3", - "orchestra/testbench": "^4.0|^5.0|^6.0", - "php-ffmpeg/php-ffmpeg": "^0.17.0", - "phpunit/phpunit": "^9.1", - "spatie/pdf-to-image": "^2.0", - "spatie/phpunit-snapshot-assertions": "^4.0" - }, - "suggest": { - "league/flysystem-aws-s3-v3": "Required to use AWS S3 file storage", - "php-ffmpeg/php-ffmpeg": "Required for generating video thumbnails", - "spatie/pdf-to-image": "Required for generating thumbsnails of PDFs and SVGs" + "php": ">=7.0.0", + "psr/http-message": "^1.0" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "Spatie\\MediaLibrary\\MediaLibraryServiceProvider" - ] + "branch-alias": { + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Spatie\\MediaLibrary\\": "src" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4253,64 +5048,52 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Associate files with Eloquent models", - "homepage": "https://github.com/spatie/laravel-medialibrary", + "description": "Common interfaces for PSR-7 HTTP message factories", "keywords": [ - "cms", - "conversion", - "downloads", - "images", - "laravel", - "laravel-medialibrary", - "media", - "spatie" + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/spatie/laravel-medialibrary/issues", - "source": "https://github.com/spatie/laravel-medialibrary/tree/8.10.2" + "source": "https://github.com/php-fig/http-factory/tree/master" }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2021-05-22T09:23:57+00:00" + "time": "2019-04-30T12:38:16+00:00" }, { - "name": "spatie/temporary-directory", - "version": "1.3.0", + "name": "psr/http-message", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/spatie/temporary-directory.git", - "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6" + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/f517729b3793bca58f847c5fd383ec16f03ffec6", - "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { - "php": "^7.2|^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0|^9.0" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { - "Spatie\\TemporaryDirectory\\": "src" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4319,63 +5102,52 @@ ], "authors": [ { - "name": "Alex Vanderbist", - "email": "alex@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Easily create, use and destroy temporary directories", - "homepage": "https://github.com/spatie/temporary-directory", + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "php", - "spatie", - "temporary-directory" + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/1.3.0" + "source": "https://github.com/php-fig/http-message/tree/master" }, - "time": "2020-11-09T15:54:21+00:00" + "time": "2016-08-06T14:39:51+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "v6.2.7", + "name": "psr/log", + "version": "1.1.4", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933" + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.2-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { - "files": [ - "lib/swift_required.php" - ] + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4383,92 +5155,122 @@ ], "authors": [ { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "email", - "mail", - "mailer" + "log", + "psr", + "psr-3" ], "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.7" + "source": "https://github.com/php-fig/log/tree/1.1.4" }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "time": "2021-03-09T12:30:35+00:00" + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" }, { - "name": "symfony/console", - "version": "v5.3.2", + "name": "psy/psysh", + "version": "v0.10.9", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1" + "url": "https://github.com/bobthecow/psysh.git", + "reference": "01281336c4ae557fe4a994544f30d3a1bc204375" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/649730483885ff2ca99ca0560ef0e5f6b03f2ac1", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/01281336c4ae557fe4a994544f30d3a1bc204375", + "reference": "01281336c4ae557fe4a994544f30d3a1bc204375", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" - }, - "conflict": { - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0" + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", + "php": "^8.0 || ^7.0 || ^5.5.9", + "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", + "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "3.17.*" }, "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." }, + "bin": [ + "bin/psysh" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.10.x-dev" + } + }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Psy\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4476,65 +5278,50 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", "keywords": [ - "cli", - "command line", + "REPL", "console", - "terminal" + "interactive", + "shell" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.2" + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.10.9" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-06-12T09:42:48+00:00" + "time": "2021-10-10T13:37:39+00:00" }, { - "name": "symfony/css-selector", - "version": "v5.3.0", + "name": "ralouphie/getallheaders", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "src/getallheaders.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4543,70 +5330,59 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", + "description": "A polyfill for getallheaders.", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.0" + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:40:38+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v2.4.0", + "name": "ramsey/collection", + "version": "1.2.2", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + "url": "https://github.com/ramsey/collection.git", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" }, + "type": "library", "autoload": { - "files": [ - "function.php" - ] + "psr-4": { + "Ramsey\\Collection\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4614,153 +5390,160 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" } ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.2.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/ramsey", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-10-10T03:01:02+00:00" }, { - "name": "symfony/error-handler", - "version": "v5.3.0", + "name": "ramsey/uuid", + "version": "4.2.3", "source": { "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2" + "url": "https://github.com/ramsey/uuid.git", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0e6768b8c0dcef26df087df2bbbaa143867a59b2", - "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/var-dumper": "^4.4|^5.0" + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8.0", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php80": "^1.14" + }, + "replace": { + "rhumsaa/uuid": "self.version" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.x-dev" + }, + "captainhook": { + "force-install": true + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" + "Ramsey\\Uuid\\": "src/" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "src/functions.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.3.0" + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.2.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/ramsey", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-09-25T23:10:38+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v5.3.0", + "name": "sabberworm/php-css-parser", + "version": "8.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce" + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67a5f354afa8e2f231081b3fa11a5912f933c3ce", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "php": ">=5.3.2" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/error-handler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "codacy/coverage": "^1.4", + "phpunit/phpunit": "~4.8" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "psr-0": { + "Sabberworm\\CSS": "lib/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4768,1360 +5551,1034 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Raphael Schweikert" } ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.0" + "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2020-06-01T09:10:00+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.4.0", + "name": "sebastian/cli-parser", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" + "php": ">=7.3" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2020-09-28T06:08:49+00:00" }, { - "name": "symfony/finder", - "version": "v5.3.0", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "source": "https://github.com/symfony/finder/tree/v5.3.0" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-05-26T12:52:38+00:00" + "time": "2020-10-26T13:08:54+00:00" }, { - "name": "symfony/http-client-contracts", - "version": "v2.4.0", + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.3" }, - "suggest": { - "symfony/http-client-implementation": "" + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Generic abstractions related to HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-04-11T23:07:08+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { - "name": "symfony/http-foundation", - "version": "v5.3.2", + "name": "sebastian/comparator", + "version": "4.0.6", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "7b6dd714d95106b831aaa7f3c9c612ab886516bd" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7b6dd714d95106b831aaa7f3c9c612ab886516bd", - "reference": "7b6dd714d95106b831aaa7f3c9c612ab886516bd", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.15" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0" - }, - "suggest": { - "symfony/mime": "To use the file extension guesser" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" } ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.3.2" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-06-12T10:15:17+00:00" + "time": "2020-10-26T15:49:45+00:00" }, { - "name": "symfony/http-kernel", - "version": "v5.3.2", + "name": "sebastian/complexity", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "e7021165d9dbfb4051296b8de827e92c8a7b5c87" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e7021165d9dbfb4051296b8de827e92c8a7b5c87", - "reference": "e7021165d9dbfb4051296b8de827e92c8a7b5c87", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "~1.0", - "symfony/deprecation-contracts": "^2.1", - "symfony/error-handler": "^4.4|^5.0", - "symfony/event-dispatcher": "^5.0", - "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^5.3", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/browser-kit": "<4.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", - "twig/twig": "<2.13" - }, - "provide": { - "psr/log-implementation": "1.0" + "nikic/php-parser": "^4.7", + "php": ">=7.3" }, "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/config": "^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/css-selector": "^4.4|^5.0", - "symfony/dependency-injection": "^5.3", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/routing": "^4.4|^5.0", - "symfony/stopwatch": "^4.4|^5.0", - "symfony/translation": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.3.2" + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2021-06-17T14:18:27+00:00" + "time": "2020-10-26T15:52:27+00:00" }, { - "name": "symfony/mime", - "version": "v5.3.2", + "name": "sebastian/diff", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/47dd7912152b82d0d4c8d9040dbc93d6232d472a", - "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" + "php": ">=7.3" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.1", - "symfony/property-info": "^4.4|^5.1", - "symfony/serializer": "^5.2" + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "mime", - "mime-type" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.3.2" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-06-09T10:58:01+00:00" + "time": "2020-10-26T13:10:38+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "name": "sebastian/environment", + "version": "5.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-ctype": "For best performance" + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "5.1-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "Xdebug", + "environment", + "hhvm" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2020-09-28T05:52:38+00:00" }, { - "name": "symfony/polyfill-iconv", - "version": "v1.23.0", + "name": "sebastian/exporter", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, - "suggest": { - "ext-iconv": "For best performance" + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "4.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" + "export", + "exporter" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-11-11T14:18:36+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.0", + "name": "sebastian/global-state", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-intl": "For best performance" + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "5.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" + "global state" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2021-06-11T13:31:12+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "name": "sebastian/lines-of-code", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "nikic/php-parser": "^4.6", + "php": ">=7.3" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2020-11-28T06:42:11+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "name": "sebastian/object-enumerator", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "4.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], "classmap": [ - "Resources/stubs" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2020-10-26T13:12:34+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.23.0", + "name": "sebastian/object-reflector", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2020-10-26T13:14:26+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.23.0", + "name": "sebastian/recursion-context", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "4.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2020-10-26T13:17:30+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.23.0", + "name": "sebastian/resource-operations", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" - ], "classmap": [ - "Resources/stubs" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2020-09-28T06:45:17+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.23.0", + "name": "sebastian/type", + "version": "2.3.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "2.3-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], "classmap": [ - "Resources/stubs" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-06-15T12:49:02+00:00" }, { - "name": "symfony/process", - "version": "v5.3.2", + "name": "sebastian/version", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "714b47f9196de61a196d86c4bad5f09201b307df" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/714b47f9196de61a196d86c4bad5f09201b307df", - "reference": "714b47f9196de61a196d86c4bad5f09201b307df", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "php": ">=7.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "source": "https://github.com/symfony/process/tree/v5.3.2" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-06-12T10:15:01+00:00" + "time": "2020-09-28T06:39:44+00:00" }, { - "name": "symfony/routing", - "version": "v5.3.0", + "name": "silber/bouncer", + "version": "v1.0.0-rc.10", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "368e81376a8e049c37cb80ae87dbfbf411279199" + "url": "https://github.com/JosephSilber/bouncer.git", + "reference": "429262a84414569be2fad1fad417f05d752c075b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/368e81376a8e049c37cb80ae87dbfbf411279199", - "reference": "368e81376a8e049c37cb80ae87dbfbf411279199", + "url": "https://api.github.com/repos/JosephSilber/bouncer/zipball/429262a84414569be2fad1fad417f05d752c075b", + "reference": "429262a84414569be2fad1fad417f05d752c075b", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" + "illuminate/auth": "^6.0|^7.0|^8.0", + "illuminate/cache": "^6.0|^7.0|^8.0", + "illuminate/container": "^6.0|^7.0|^8.0", + "illuminate/contracts": "^6.0|^7.0|^8.0", + "illuminate/database": "^6.0|^7.0|^8.0", + "php": "^7.2|^8.0" }, - "require-dev": { - "doctrine/annotations": "^1.12", - "psr/log": "~1.0", - "symfony/config": "^5.3", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "require-dev": { + "illuminate/console": "^6.0|^7.0|^8.0", + "illuminate/events": "^6.0|^7.0|^8.0", + "larapack/dd": "^1.1", + "mockery/mockery": "^1.3.3", + "phpunit/phpunit": "^8.0|^9.0" }, "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "illuminate/console": "Allows running the bouncer:clean artisan command", + "illuminate/events": "Required for multi-tenancy support" }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "Silber\\Bouncer\\BouncerServiceProvider" + ], + "aliases": { + "Bouncer": "Silber\\Bouncer\\BouncerFacade" + } + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Silber\\Bouncer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6129,75 +6586,51 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Joseph Silber", + "email": "contact@josephsilber.com" } ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", + "description": "Eloquent roles and abilities.", "keywords": [ - "router", - "routing", - "uri", - "url" + "abilities", + "acl", + "capabilities", + "eloquent", + "laravel", + "permissions", + "roles" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.3.0" + "issues": "https://github.com/JosephSilber/bouncer/issues", + "source": "https://github.com/JosephSilber/bouncer/tree/v1.0.0-rc.10" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2020-12-08T15:31:20+00:00" }, { - "name": "symfony/service-contracts", - "version": "v2.4.0", + "name": "spatie/db-dumper", + "version": "2.21.1", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + "url": "https://github.com/spatie/db-dumper.git", + "reference": "05e5955fb882008a8947c5a45146d86cfafa10d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "url": "https://api.github.com/repos/spatie/db-dumper/zipball/05e5955fb882008a8947c5a45146d86cfafa10d1", + "reference": "05e5955fb882008a8947c5a45146d86cfafa10d1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1" + "php": "^7.2|^8.0", + "symfony/process": "^4.2|^5.0" }, - "suggest": { - "symfony/service-implementation": "" + "require-dev": { + "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, "autoload": { "psr-4": { - "Symfony\\Contracts\\Service\\": "" + "Spatie\\DbDumper\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -6206,82 +6639,63 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", + "description": "Dump databases", + "homepage": "https://github.com/spatie/db-dumper", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "database", + "db-dumper", + "dump", + "mysqldump", + "spatie" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + "issues": "https://github.com/spatie/db-dumper/issues", + "source": "https://github.com/spatie/db-dumper/tree/2.21.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/spatie", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-04-01T10:43:52+00:00" + "time": "2021-02-24T14:56:42+00:00" }, { - "name": "symfony/string", - "version": "v5.3.2", + "name": "spatie/dropbox-api", + "version": "1.19.1", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "0732e97e41c0a590f77e231afc16a327375d50b0" + "url": "https://github.com/spatie/dropbox-api.git", + "reference": "0ea6d08445b339241d21b833db111d371e61ed4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/0732e97e41c0a590f77e231afc16a327375d50b0", - "reference": "0732e97e41c0a590f77e231afc16a327375d50b0", + "url": "https://api.github.com/repos/spatie/dropbox-api/zipball/0ea6d08445b339241d21b833db111d371e61ed4f", + "reference": "0ea6d08445b339241d21b833db111d371e61ed4f", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "graham-campbell/guzzle-factory": "^3.0||^4.0||^5.0", + "guzzlehttp/guzzle": "^6.2||^7.0", + "php": "^7.1||^8.0" + }, + "conflict": { + "guzzlehttp/psr7": "<1.7.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "phpunit/phpunit": "^7.5.15|^8.5|^9.3" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] + "Spatie\\Dropbox\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6289,102 +6703,70 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Alex Vanderbist", + "email": "alex.vanderbist@gmail.com", + "homepage": "https://spatie.be", + "role": "Developer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", + "description": "A minimal implementation of Dropbox API v2", + "homepage": "https://github.com/spatie/dropbox-api", "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" + "Dropbox-API", + "api", + "dropbox", + "spatie", + "v2" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.2" + "issues": "https://github.com/spatie/dropbox-api/issues", + "source": "https://github.com/spatie/dropbox-api/tree/1.19.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://spatie.be/open-source/support-us", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/spatie", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2021-07-04T12:13:24+00:00" }, { - "name": "symfony/translation", - "version": "v5.3.2", + "name": "spatie/flysystem-dropbox", + "version": "1.2.3", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b" + "url": "https://github.com/spatie/flysystem-dropbox.git", + "reference": "8b6b072f217343b875316ca6a4203dd59f04207a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7e2603bcc598e14804c4d2359d8dc4ee3c40391b", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b", + "url": "https://api.github.com/repos/spatie/flysystem-dropbox/zipball/8b6b072f217343b875316ca6a4203dd59f04207a", + "reference": "8b6b072f217343b875316ca6a4203dd59f04207a", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/translation-contracts": "^2.3" - }, - "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" - }, - "provide": { - "symfony/translation-implementation": "2.3" + "league/flysystem": "^1.0.20", + "php": "^7.0 || ^8.0", + "spatie/dropbox-api": "^1.1.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", - "symfony/intl": "^4.4|^5.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^4.4|^5.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.11 || ^9.4.3" }, "type": "library", "autoload": { - "files": [ - "Resources/functions.php" - ], "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Spatie\\FlysystemDropbox\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6392,68 +6774,61 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Alex Vanderbist", + "email": "alex.vanderbist@gmail.com", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", + "description": "Flysystem Adapter for the Dropbox v2 API", + "homepage": "https://github.com/spatie/flysystem-dropbox", + "keywords": [ + "Flysystem", + "api", + "dropbox", + "flysystem-dropbox", + "spatie", + "v2" + ], "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.2" + "issues": "https://github.com/spatie/flysystem-dropbox/issues", + "source": "https://github.com/spatie/flysystem-dropbox/tree/1.2.3" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2020-11-28T22:17:09+00:00" }, { - "name": "symfony/translation-contracts", - "version": "v2.4.0", + "name": "spatie/image", + "version": "1.10.5", "source": { "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95" + "url": "https://github.com/spatie/image.git", + "reference": "63a963d0200fb26f2564bf7201fc7272d9b22933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95", + "url": "https://api.github.com/repos/spatie/image/zipball/63a963d0200fb26f2564bf7201fc7272d9b22933", + "reference": "63a963d0200fb26f2564bf7201fc7272d9b22933", "shasum": "" }, "require": { - "php": ">=7.2.5" + "ext-exif": "*", + "ext-json": "*", + "ext-mbstring": "*", + "league/glide": "^1.6", + "php": "^7.2|^8.0", + "spatie/image-optimizer": "^1.1", + "spatie/temporary-directory": "^1.0|^2.0", + "symfony/process": "^3.0|^4.0|^5.0" }, - "suggest": { - "symfony/translation-implementation": "" + "require-dev": { + "phpunit/phpunit": "^8.0|^9.0", + "symfony/var-dumper": "^4.0|^5.0", + "vimeo/psalm": "^4.6" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, "autoload": { "psr-4": { - "Symfony\\Contracts\\Translation\\": "" + "Spatie\\Image\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -6462,91 +6837,63 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", + "description": "Manipulate images with an expressive API", + "homepage": "https://github.com/spatie/image", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "image", + "spatie" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" + "issues": "https://github.com/spatie/image/issues", + "source": "https://github.com/spatie/image/tree/1.10.5" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://spatie.be/open-source/support-us", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/spatie", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-04-07T08:42:24+00:00" }, { - "name": "symfony/var-dumper", - "version": "v5.3.2", + "name": "spatie/image-optimizer", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae" + "url": "https://github.com/spatie/image-optimizer.git", + "reference": "1b3585c3da2cc8872141fce40fbd17e07e6655d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/905a22c68b292ffb6f20d7636c36b220d1fba5ae", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/1b3585c3da2cc8872141fce40fbd17e07e6655d1", + "reference": "1b3585c3da2cc8872141fce40fbd17e07e6655d1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" + "ext-fileinfo": "*", + "php": "^7.2|^8.0", + "psr/log": "^1.0 | ^2.0 | ^3.0", + "symfony/process": "^4.2|^5.0" }, "require-dev": { - "ext-iconv": "*", - "symfony/console": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + "phpunit/phpunit": "^8.0|^9.0", + "symfony/var-dumper": "^4.2|^5.0" }, - "bin": [ - "Resources/bin/var-dump-server" - ], "type": "library", "autoload": { - "files": [ - "Resources/functions/dump.php" - ], "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Spatie\\ImageOptimizer\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6554,137 +6901,176 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", + "description": "Easily optimize images using PHP", + "homepage": "https://github.com/spatie/image-optimizer", "keywords": [ - "debug", - "dump" + "image-optimizer", + "spatie" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.3.2" + "issues": "https://github.com/spatie/image-optimizer/issues", + "source": "https://github.com/spatie/image-optimizer/tree/1.5.0" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2021-10-11T15:44:16+00:00" }, { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.3", + "name": "spatie/laravel-backup", + "version": "6.16.5", "source": { "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" + "url": "https://github.com/spatie/laravel-backup.git", + "reference": "332fae80b12cacb9e4161824ba195d984b28c8fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", + "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/332fae80b12cacb9e4161824ba195d984b28c8fb", + "reference": "332fae80b12cacb9e4161824ba195d984b28c8fb", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" + "ext-zip": "^1.14.0", + "illuminate/console": "^6.0|^7.0|^8.0", + "illuminate/contracts": "^6.0|^7.0|^8.0", + "illuminate/events": "^6.0|^7.0|^8.0", + "illuminate/filesystem": "^6.0|^7.0|^8.0", + "illuminate/notifications": "^6.0|^7.0|^8.0", + "illuminate/support": "^6.0|^7.0|^8.0", + "league/flysystem": "^1.0.49", + "php": "^7.3|^8.0", + "spatie/db-dumper": "^2.12", + "spatie/temporary-directory": "^1.1", + "symfony/finder": "^4.2|^5.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" + "laravel/slack-notification-channel": "^2.3", + "league/flysystem-aws-s3-v3": "^1.0", + "mockery/mockery": "^1.4.2", + "orchestra/testbench": "4.*|5.*|6.*", + "phpunit/phpunit": "^8.4|^9.0" + }, + "suggest": { + "laravel/slack-notification-channel": "Required for sending notifications via Slack" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" + "laravel": { + "providers": [ + "Spatie\\Backup\\BackupServiceProvider" + ] } }, "autoload": { "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } + "Spatie\\Backup\\": "src" + }, + "files": [ + "src/Helpers/functions.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", "role": "Developer" } ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "description": "A Laravel package to backup your application", + "homepage": "https://github.com/spatie/laravel-backup", + "keywords": [ + "backup", + "database", + "laravel-backup", + "spatie" + ], "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.3" + "issues": "https://github.com/spatie/laravel-backup/issues", + "source": "https://github.com/spatie/laravel-backup/tree/6.16.5" }, - "time": "2020-07-13T06:12:54+00:00" + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-09-12T10:04:18+00:00" }, { - "name": "vinkla/hashids", - "version": "9.1.0", + "name": "spatie/laravel-medialibrary", + "version": "8.10.2", "source": { "type": "git", - "url": "https://github.com/vinkla/laravel-hashids.git", - "reference": "cb0086db96cdb49816465adc97e3a024c8ee9767" + "url": "https://github.com/spatie/laravel-medialibrary.git", + "reference": "448e8389cadc79f42c3c96c7c9491b57015702d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vinkla/laravel-hashids/zipball/cb0086db96cdb49816465adc97e3a024c8ee9767", - "reference": "cb0086db96cdb49816465adc97e3a024c8ee9767", + "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/448e8389cadc79f42c3c96c7c9491b57015702d4", + "reference": "448e8389cadc79f42c3c96c7c9491b57015702d4", "shasum": "" }, - "require": { - "graham-campbell/manager": "^4.4", - "hashids/hashids": "^4.1", - "illuminate/contracts": "^8.0", - "illuminate/support": "^8.0", - "php": "^7.3 || ^8.0" + "require": { + "ext-fileinfo": "*", + "ext-json": "*", + "illuminate/bus": "^6.18|^7.0|^8.0", + "illuminate/console": "^6.18|^7.0|^8.0", + "illuminate/database": "^6.18|^7.0|^8.0", + "illuminate/pipeline": "^6.18|^7.0|^8.0", + "illuminate/support": "^6.18|^7.0|^8.0", + "league/flysystem": "^1.0.64", + "maennchen/zipstream-php": "^1.0|^2.0", + "php": "^7.4|^8.0", + "spatie/image": "^1.4.0", + "spatie/temporary-directory": "^1.1", + "symfony/console": "^4.4|^5.0" + }, + "conflict": { + "php-ffmpeg/php-ffmpeg": "<0.6.1" }, "require-dev": { - "graham-campbell/analyzer": "^3.0", - "graham-campbell/testbench": "^5.4", + "aws/aws-sdk-php": "^3.133.11", + "doctrine/dbal": "^2.5.2", + "ext-pdo_sqlite": "*", + "ext-zip": "*", + "guzzlehttp/guzzle": "^6.3|^7.0", + "league/flysystem-aws-s3-v3": "^1.0.23", "mockery/mockery": "^1.3", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "^3.5" + "orchestra/testbench": "^4.0|^5.0|^6.0", + "php-ffmpeg/php-ffmpeg": "^0.17.0", + "phpunit/phpunit": "^9.1", + "spatie/pdf-to-image": "^2.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "suggest": { + "league/flysystem-aws-s3-v3": "Required to use AWS S3 file storage", + "php-ffmpeg/php-ffmpeg": "Required for generating video thumbnails", + "spatie/pdf-to-image": "Required for generating thumbsnails of PDFs and SVGs" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "9.1-dev" - }, "laravel": { "providers": [ - "Vinkla\\Hashids\\HashidsServiceProvider" - ], - "aliases": { - "Hashids": "Vinkla\\Hashids\\Facades\\Hashids" - } + "Spatie\\MediaLibrary\\MediaLibraryServiceProvider" + ] } }, "autoload": { "psr-4": { - "Vinkla\\Hashids\\": "src/" + "Spatie\\MediaLibrary\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -6693,128 +7079,124 @@ ], "authors": [ { - "name": "Vincent Klaiber", - "email": "hello@doubledip.se" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "A Hashids bridge for Laravel", + "description": "Associate files with Eloquent models", + "homepage": "https://github.com/spatie/laravel-medialibrary", "keywords": [ - "hashids", - "laravel" + "cms", + "conversion", + "downloads", + "images", + "laravel", + "laravel-medialibrary", + "media", + "spatie" ], "support": { - "issues": "https://github.com/vinkla/laravel-hashids/issues", - "source": "https://github.com/vinkla/laravel-hashids/tree/9.1.0" + "issues": "https://github.com/spatie/laravel-medialibrary/issues", + "source": "https://github.com/spatie/laravel-medialibrary/tree/8.10.2" }, - "time": "2020-11-26T19:38:22+00:00" + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2021-05-22T09:23:57+00:00" }, { - "name": "vlucas/phpdotenv", - "version": "v5.3.0", + "name": "spatie/laravel-package-tools", + "version": "1.9.2", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56" + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "f710fe196c126fb9e0aee67eb5af49ad8f13f528" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/f710fe196c126fb9e0aee67eb5af49ad8f13f528", + "reference": "f710fe196c126fb9e0aee67eb5af49ad8f13f528", "shasum": "" }, "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.1", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.7.4", - "symfony/polyfill-ctype": "^1.17", - "symfony/polyfill-mbstring": "^1.17", - "symfony/polyfill-php80": "^1.17" + "illuminate/contracts": "^7.0|^8.0", + "php": "^7.4|^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." + "mockery/mockery": "^1.4", + "orchestra/testbench": "^5.0|^6.0", + "phpunit/phpunit": "^9.3", + "spatie/test-time": "^1.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.3-dev" - } - }, "autoload": { "psr-4": { - "Dotenv\\": "src/" + "Spatie\\LaravelPackageTools\\": "src", + "Spatie\\LaravelPackageTools\\Database\\Factories\\": "database/factories" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "homepage": "https://gjcampbell.co.uk/" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://vancelucas.com/" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" } ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", "keywords": [ - "dotenv", - "env", - "environment" + "laravel-package-tools", + "spatie" ], "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0" + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.9.2" }, "funding": [ { - "url": "https://github.com/GrahamCampbell", + "url": "https://github.com/spatie", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" } ], - "time": "2021-01-20T15:23:13+00:00" + "time": "2021-09-21T13:06:51+00:00" }, { - "name": "voku/portable-ascii", - "version": "1.5.6", + "name": "spatie/temporary-directory", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" + "url": "https://github.com/spatie/temporary-directory.git", + "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/f517729b3793bca58f847c5fd383ec16f03ffec6", + "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6", "shasum": "" }, "require": { - "php": ">=7.0.0" + "php": "^7.2|^8.0" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" + "phpunit/phpunit": "^8.0|^9.0" }, "type": "library", "autoload": { "psr-4": { - "voku\\": "src/voku/" + "Spatie\\TemporaryDirectory\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -6823,80 +7205,63 @@ ], "authors": [ { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "name": "Alex Vanderbist", + "email": "alex@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", + "description": "Easily create, use and destroy temporary directories", + "homepage": "https://github.com/spatie/temporary-directory", "keywords": [ - "ascii", - "clean", - "php" + "php", + "spatie", + "temporary-directory" ], "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + "issues": "https://github.com/spatie/temporary-directory/issues", + "source": "https://github.com/spatie/temporary-directory/tree/1.3.0" }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2020-11-12T00:07:28+00:00" + "time": "2020-11-09T15:54:21+00:00" }, { - "name": "webmozart/assert", - "version": "1.10.0", + "name": "swiftmailer/swiftmailer", + "version": "v6.3.0", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^8.5.13" + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.4" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-master": "6.2-dev" } }, "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "files": [ + "lib/swift_required.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6904,79 +7269,93 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], - "description": "Assertions to validate method input/output with nice error messages.", + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", "keywords": [ - "assert", - "check", - "validate" + "email", + "mail", + "mailer" ], "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" }, - "time": "2021-03-09T10:59:23+00:00" - } - ], - "packages-dev": [ + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "time": "2021-10-18T15:26:12+00:00" + }, { - "name": "barryvdh/laravel-ide-helper", - "version": "v2.10.0", + "name": "symfony/console", + "version": "v5.3.10", "source": { "type": "git", - "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "73b1012b927633a1b4cd623c2e6b1678e6faef08" + "url": "https://github.com/symfony/console.git", + "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/73b1012b927633a1b4cd623c2e6b1678e6faef08", - "reference": "73b1012b927633a1b4cd623c2e6b1678e6faef08", + "url": "https://api.github.com/repos/symfony/console/zipball/d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3", + "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3", "shasum": "" }, "require": { - "barryvdh/reflection-docblock": "^2.0.6", - "composer/composer": "^1.6 || ^2", - "doctrine/dbal": "^2.6 || ^3", - "ext-json": "*", - "illuminate/console": "^8", - "illuminate/filesystem": "^8", - "illuminate/support": "^8", - "nikic/php-parser": "^4.7", - "php": "^7.3 || ^8.0", - "phpdocumentor/type-resolver": "^1.1.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "ext-pdo_sqlite": "*", - "friendsofphp/php-cs-fixer": "^2", - "illuminate/config": "^8", - "illuminate/view": "^8", - "mockery/mockery": "^1.4", - "orchestra/testbench": "^6", - "phpunit/phpunit": "^8.5 || ^9", - "spatie/phpunit-snapshot-assertions": "^3 || ^4", - "vimeo/psalm": "^3.12" + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" }, "suggest": { - "illuminate/events": "Required for automatic helper generation (^6|^7|^8)." + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.9-dev" - }, - "laravel": { - "providers": [ - "Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider" - ] - } - }, "autoload": { "psr-4": { - "Barryvdh\\LaravelIdeHelper\\": "src" - } + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6984,70 +7363,67 @@ ], "authors": [ { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.", + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", "keywords": [ - "autocomplete", - "codeintel", - "helper", - "ide", - "laravel", - "netbeans", - "phpdoc", - "phpstorm", - "sublime" + "cli", + "command line", + "console", + "terminal" ], "support": { - "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.10.0" + "source": "https://github.com/symfony/console/tree/v5.3.10" }, "funding": [ { - "url": "https://github.com/barryvdh", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2021-04-09T06:17:55+00:00" + "time": "2021-10-26T09:30:15+00:00" }, { - "name": "barryvdh/reflection-docblock", - "version": "v2.0.6", + "name": "symfony/css-selector", + "version": "v5.3.4", "source": { "type": "git", - "url": "https://github.com/barryvdh/ReflectionDocBlock.git", - "reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16" + "url": "https://github.com/symfony/css-selector.git", + "reference": "7fb120adc7f600a59027775b224c13a33530dd90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/6b69015d83d3daf9004a71a89f26e27d27ef6a16", - "reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", + "reference": "7fb120adc7f600a59027775b224c13a33530dd90", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0,<4.5" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { - "psr-0": { - "Barryvdh": [ - "src/" - ] - } + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7055,54 +7431,69 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", "support": { - "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.0.6" + "source": "https://github.com/symfony/css-selector/tree/v5.3.4" }, - "time": "2018-12-13T10:34:14+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T12:38:00+00:00" }, { - "name": "beyondcode/laravel-dump-server", - "version": "1.7.0", + "name": "symfony/deprecation-contracts", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/beyondcode/laravel-dump-server.git", - "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/e27c7b942ab62f6ac7168359393d328ec5215b89", - "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", "shasum": "" }, "require": { - "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", - "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", - "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", - "php": ">=7.2.5", - "symfony/var-dumper": "^5.0" - }, - "require-dev": { - "larapack/dd": "^1.0", - "phpunit/phpunit": "^7.0|^9.3" + "php": ">=7.1" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "BeyondCode\\DumpServer\\DumpServerServiceProvider" - ] + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "psr-4": { - "BeyondCode\\DumpServer\\": "src" - }, "files": [ - "helpers.php" + "function.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7111,59 +7502,67 @@ ], "authors": [ { - "name": "Marcel Pociot", - "email": "marcel@beyondco.de", - "homepage": "https://beyondco.de", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Var-Dump Server for Laravel", - "homepage": "https://github.com/beyondcode/laravel-dump-server", - "keywords": [ - "beyondcode", - "laravel-dump-server" - ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/beyondcode/laravel-dump-server/issues", - "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.7.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" }, - "time": "2020-12-15T10:57:43+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-03-23T23:28:01+00:00" }, { - "name": "composer/ca-bundle", - "version": "1.2.10", + "name": "symfony/error-handler", + "version": "v5.3.7", "source": { "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "9fdb22c2e97a614657716178093cd1da90a64aa8" + "url": "https://github.com/symfony/error-handler.git", + "reference": "3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/9fdb22c2e97a614657716178093cd1da90a64aa8", - "reference": "9fdb22c2e97a614657716178093cd1da90a64aa8", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321", + "reference": "3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321", "shasum": "" }, "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\CaBundle\\": "src" - } + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7171,93 +7570,84 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.2.10" + "source": "https://github.com/symfony/error-handler/tree/v5.3.7" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2021-06-07T13:58:28+00:00" + "time": "2021-08-28T15:07:08+00:00" }, { - "name": "composer/composer", - "version": "2.1.3", + "name": "symfony/event-dispatcher", + "version": "v5.3.7", "source": { "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "fc5c4573aafce3a018eb7f1f8f91cea423970f2e" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "ce7b20d69c66a20939d8952b617506a44d102130" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/fc5c4573aafce3a018eb7f1f8f91cea423970f2e", - "reference": "fc5c4573aafce3a018eb7f1f8f91cea423970f2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ce7b20d69c66a20939d8952b617506a44d102130", + "reference": "ce7b20d69c66a20939d8952b617506a44d102130", "shasum": "" }, "require": { - "composer/ca-bundle": "^1.0", - "composer/metadata-minifier": "^1.0", - "composer/semver": "^3.0", - "composer/spdx-licenses": "^1.2", - "composer/xdebug-handler": "^2.0", - "justinrainbow/json-schema": "^5.2.10", - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0", - "react/promise": "^1.2 || ^2.7", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", - "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", - "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", - "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { - "phpspec/prophecy": "^1.10", - "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" }, "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, - "bin": [ - "bin/composer" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, "autoload": { "psr-4": { - "Composer\\": "src/Composer" - } + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7265,75 +7655,69 @@ ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "https://www.naderman.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.1.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.7" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2021-06-09T14:31:20+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { - "name": "composer/metadata-minifier", - "version": "1.0.0", + "name": "symfony/event-dispatcher-contracts", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/composer/metadata-minifier.git", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" }, - "require-dev": { - "composer/composer": "^2", - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "suggest": { + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev" + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Composer\\MetadataMinifier\\": "src" + "Symfony\\Contracts\\EventDispatcher\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -7342,67 +7726,69 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Small utility library that handles metadata minification and expansion.", + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", "keywords": [ - "composer", - "compression" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/composer/metadata-minifier/issues", - "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2021-04-07T13:37:33+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { - "name": "composer/semver", - "version": "3.2.5", + "name": "symfony/finder", + "version": "v5.3.7", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9" + "url": "https://github.com/symfony/finder.git", + "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9", - "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9", + "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93", + "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.54", - "symfony/phpunit-bridge": "^4.2 || ^5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\Semver\\": "src" - } + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7410,78 +7796,68 @@ ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.5" + "source": "https://github.com/symfony/finder/tree/v5.3.7" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2021-05-24T12:41:47+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { - "name": "composer/spdx-licenses", - "version": "1.5.5", + "name": "symfony/http-client-contracts", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "de30328a7af8680efdc03e396aad24befd513200" + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/de30328a7af8680efdc03e396aad24befd513200", - "reference": "de30328a7af8680efdc03e396aad24befd513200", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": ">=7.2.5" }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" + "suggest": { + "symfony/http-client-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev" + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Composer\\Spdx\\": "src" + "Symfony\\Contracts\\HttpClient\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -7490,75 +7866,80 @@ ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "SPDX licenses list and validation library.", + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", "keywords": [ - "license", - "spdx", - "validator" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.5" + "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2020-12-03T16:04:16+00:00" + "time": "2021-04-11T23:07:08+00:00" }, { - "name": "composer/xdebug-handler", - "version": "2.0.1", + "name": "symfony/http-foundation", + "version": "v5.3.10", "source": { "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "9f34f02e8a5fdc7a56bafe011cea1ce97300e54c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", - "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9f34f02e8a5fdc7a56bafe011cea1ce97300e54c", + "reference": "9f34f02e8a5fdc7a56bafe011cea1ce97300e54c", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" }, "type": "library", "autoload": { "psr-4": { - "Composer\\XdebugHandler\\": "src" - } + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7566,68 +7947,111 @@ ], "authors": [ { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.1" + "source": "https://github.com/symfony/http-foundation/tree/v5.3.10" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2021-05-05T19:37:51+00:00" + "time": "2021-10-11T15:41:55+00:00" }, { - "name": "doctrine/annotations", - "version": "1.13.1", + "name": "symfony/http-kernel", + "version": "v5.3.10", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f" + "url": "https://github.com/symfony/http-kernel.git", + "reference": "703e4079920468e9522b72cf47fd76ce8d795e86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/703e4079920468e9522b72cf47fd76ce8d795e86", + "reference": "703e4079920468e9522b72cf47fd76ce8d795e86", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/http-foundation": "^5.3.7", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^5.3", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7635,70 +8059,78 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.3.10" + }, + "funding": [ { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.1" - }, - "time": "2021-05-16T18:07:53+00:00" + "time": "2021-10-29T08:36:48+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.4.0", + "name": "symfony/mime", + "version": "v5.3.8", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "url": "https://github.com/symfony/mime.git", + "reference": "a756033d0a7e53db389618653ae991eba5a19a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/symfony/mime/zipball/a756033d0a7e53db389618653ae991eba5a19a11", + "reference": "a756033d0a7e53db389618653ae991eba5a19a11", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7706,206 +8138,235 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" ], "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/symfony/mime/tree/v5.3.8" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" + "url": "https://github.com/fabpot", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2021-09-10T12:30:38+00:00" }, { - "name": "facade/flare-client-php", - "version": "1.8.1", + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/facade/flare-client-php.git", - "reference": "47b639dc02bcfdfc4ebb83de703856fa01e35f5f" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/47b639dc02bcfdfc4ebb83de703856fa01e35f5f", - "reference": "47b639dc02bcfdfc4ebb83de703856fa01e35f5f", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", "shasum": "" }, "require": { - "facade/ignition-contracts": "~1.0", - "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", - "php": "^7.1|^8.0", - "symfony/http-foundation": "^3.3|^4.1|^5.0", - "symfony/mime": "^3.4|^4.0|^5.1", - "symfony/var-dumper": "^3.4|^4.0|^5.0" + "php": ">=7.1" }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "phpunit/phpunit": "^7.5.16", - "spatie/phpunit-snapshot-assertions": "^2.0" + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Facade\\FlareClient\\": "src" + "Symfony\\Polyfill\\Ctype\\": "" }, "files": [ - "src/helpers.php" + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/facade/flare-client-php", + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", "keywords": [ - "exception", - "facade", - "flare", - "reporting" + "compatibility", + "ctype", + "polyfill", + "portable" ], "support": { - "issues": "https://github.com/facade/flare-client-php/issues", - "source": "https://github.com/facade/flare-client-php/tree/1.8.1" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" }, "funding": [ { - "url": "https://github.com/spatie", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2021-05-31T19:23:29+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { - "name": "facade/ignition", - "version": "2.10.2", + "name": "symfony/polyfill-iconv", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/facade/ignition.git", - "reference": "43688227bbf27c43bc1ad83af224f135b6ef0ff4" + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/43688227bbf27c43bc1ad83af224f135b6ef0ff4", - "reference": "43688227bbf27c43bc1ad83af224f135b6ef0ff4", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", + "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", "shasum": "" }, "require": { - "ext-json": "*", - "ext-mbstring": "*", - "facade/flare-client-php": "^1.6", - "facade/ignition-contracts": "^1.0.2", - "filp/whoops": "^2.4", - "illuminate/support": "^7.0|^8.0", - "monolog/monolog": "^2.0", - "php": "^7.2.5|^8.0", - "symfony/console": "^5.0", - "symfony/var-dumper": "^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "mockery/mockery": "^1.3", - "orchestra/testbench": "^5.0|^6.0", - "psalm/plugin-laravel": "^1.2" + "php": ">=7.1" }, "suggest": { - "laravel/telescope": "^3.1" + "ext-iconv": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-main": "1.23-dev" }, - "laravel": { - "providers": [ - "Facade\\Ignition\\IgnitionServiceProvider" - ], - "aliases": { - "Flare": "Facade\\Ignition\\Facades\\Flare" - } + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Facade\\Ignition\\": "src" + "Symfony\\Polyfill\\Iconv\\": "" }, "files": [ - "src/helpers.php" + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://github.com/facade/ignition", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", "keywords": [ - "error", - "flare", - "laravel", - "page" + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" ], "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/facade/ignition/issues", - "source": "https://github.com/facade/ignition" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0" }, - "time": "2021-06-11T06:57:25+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:27:20+00:00" }, { - "name": "facade/ignition-contracts", - "version": "1.0.2", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.23.1", "source": { "type": "git", - "url": "https://github.com/facade/ignition-contracts.git", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": ">=7.1" }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^v2.15.8", - "phpunit/phpunit": "^9.3.11", - "vimeo/psalm": "^3.17.1" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { "psr-4": { - "Facade\\IgnitionContracts\\": "src" - } + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7913,62 +8374,82 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://flareapp.io", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Solution contracts for Ignition", - "homepage": "https://github.com/facade/ignition-contracts", + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", "keywords": [ - "contracts", - "flare", - "ignition" + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/facade/ignition-contracts/issues", - "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" }, - "time": "2020-10-16T08:27:54+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T12:26:48+00:00" }, { - "name": "filp/whoops", - "version": "2.13.0", + "name": "symfony/polyfill-intl-idn", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "2edbc73a4687d9085c8f20f398eebade844e8424" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/2edbc73a4687d9085c8f20f398eebade844e8424", - "reference": "2edbc73a4687d9085c8f20f398eebade844e8424", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", - "psr/log": "^1.0.1" - }, - "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" }, "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Whoops\\": "src/Whoops/" - } + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7976,93 +8457,87 @@ ], "authors": [ { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.13.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" }, "funding": [ { - "url": "https://github.com/denis-sokolov", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2021-06-04T12:00:00+00:00" + "time": "2021-05-27T09:27:20+00:00" }, { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.0.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "c15377bdfa8d1ecf186f1deadec39c89984e1167" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/c15377bdfa8d1ecf186f1deadec39c89984e1167", - "reference": "c15377bdfa8d1ecf186f1deadec39c89984e1167", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", "shasum": "" }, "require": { - "composer/semver": "^3.2", - "composer/xdebug-handler": "^2.0", - "doctrine/annotations": "^1.12", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.1.3 || ^8.0", - "php-cs-fixer/diff": "^2.0", - "symfony/console": "^4.4.20 || ^5.1.3", - "symfony/event-dispatcher": "^4.4.20 || ^5.0", - "symfony/filesystem": "^4.4.20 || ^5.0", - "symfony/finder": "^4.4.20 || ^5.0", - "symfony/options-resolver": "^4.4.20 || ^5.0", - "symfony/polyfill-php72": "^1.22", - "symfony/process": "^4.4.20 || ^5.0", - "symfony/stopwatch": "^4.4.20 || ^5.0" - }, - "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.4", - "mikey179/vfsstream": "^1.6.8", - "php-coveralls/php-coveralls": "^2.4.3", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.10.3", - "phpspec/prophecy-phpunit": "^1.1 || ^2.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "symfony/phpunit-bridge": "^5.2.4", - "symfony/yaml": "^4.4.20 || ^5.0" + "php": ">=7.1" }, "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters.", - "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", "autoload": { "psr-4": { - "PhpCsFixer\\": "src/" - } + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8070,59 +8545,80 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A tool to automatically fix PHP code style", + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.0.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" }, "funding": [ { - "url": "https://github.com/keradus", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2021-05-03T21:51:58+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { - "name": "fzaninotto/faker", - "version": "v1.9.2", + "name": "symfony/polyfill-mbstring", + "version": "v1.23.1", "source": { "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": ">=7.1" }, - "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Faker\\": "src/Faker/" - } + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8130,104 +8626,155 @@ ], "authors": [ { - "name": "François Zaninotto" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Faker is a PHP library that generates fake data for you.", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "data", - "faker", - "fixtures" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/fzaninotto/Faker/issues", - "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" }, - "abandoned": true, - "time": "2020-12-11T09:56:16+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T12:26:48+00:00" }, { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "name": "symfony/polyfill-php72", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "hamcrest" + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "description": "This is the PHP port of Hamcrest Matchers", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "test" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" }, - "time": "2020-07-09T08:09:16+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:17:38+00:00" }, { - "name": "jasonmccreary/laravel-test-assertions", - "version": "v1.1.0", + "name": "symfony/polyfill-php73", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/jasonmccreary/laravel-test-assertions.git", - "reference": "163c9df0a68a6fb7c39827292a315408bcea27cc" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jasonmccreary/laravel-test-assertions/zipball/163c9df0a68a6fb7c39827292a315408bcea27cc", - "reference": "163c9df0a68a6fb7c39827292a315408bcea27cc", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", "shasum": "" }, "require": { - "mockery/mockery": "^1.0", - "php": ">=7.2", - "phpunit/phpunit": "^7.5|^8.0|^9.0" + "php": ">=7.1" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "JMac\\Testing\\AdditionalAssertionsServiceProvider" - ] + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "JMac\\Testing\\": "src/" - } + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8235,52 +8782,78 @@ ], "authors": [ { - "name": "Jason McCreary", - "email": "jason@pureconcepts.net" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A set of helpful assertions when testing Laravel applications.", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/jasonmccreary/laravel-test-assertions/issues", - "source": "https://github.com/jasonmccreary/laravel-test-assertions/tree/v1.1.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" }, - "time": "2021-02-20T13:23:21+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" }, { - "name": "justinrainbow/json-schema", - "version": "5.2.10", + "name": "symfony/polyfill-php80", + "version": "v1.23.1", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" + "php": ">=7.1" }, - "bin": [ - "bin/validate-json" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0.x-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8288,208 +8861,234 @@ ], "authors": [ { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" }, { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "json", - "schema" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" }, - "time": "2020-05-27T16:41:55+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-28T13:41:28+00:00" }, { - "name": "mockery/mockery", - "version": "1.4.3", + "name": "symfony/polyfill-php81", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "e66119f3de95efc359483f810c4c3e6436279436" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/d1339f64479af1bee0e82a0413813fe5345a54ea", - "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", + "reference": "e66119f3de95efc359483f810c4c3e6436279436", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-0": { - "Mockery": "library/" - } + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.4.3" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" }, - "time": "2021-02-24T09:51:49+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-21T13:25:03+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.10.2", + "name": "symfony/process", + "version": "v5.3.7", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "url": "https://github.com/symfony/process.git", + "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/symfony/process/zipball/38f26c7d6ed535217ea393e05634cb0b244a1967", + "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "Symfony\\Component\\Process\\": "" }, - "files": [ - "src/DeepCopy/deep_copy.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/symfony/process/tree/v5.3.7" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { - "name": "nunomaduro/collision", - "version": "v5.5.0", + "name": "symfony/routing", + "version": "v5.3.7", "source": { "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "b5cb36122f1c142c3c3ee20a0ae778439ef0244b" + "url": "https://github.com/symfony/routing.git", + "reference": "be865017746fe869007d94220ad3f5297951811b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/b5cb36122f1c142c3c3ee20a0ae778439ef0244b", - "reference": "b5cb36122f1c142c3c3ee20a0ae778439ef0244b", + "url": "https://api.github.com/repos/symfony/routing/zipball/be865017746fe869007d94220ad3f5297951811b", + "reference": "be865017746fe869007d94220ad3f5297951811b", "shasum": "" }, "require": { - "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.7.2", - "php": "^7.3 || ^8.0", - "symfony/console": "^5.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" }, "require-dev": { - "brianium/paratest": "^6.1", - "fideloper/proxy": "^4.4.1", - "friendsofphp/php-cs-fixer": "^2.17.3", - "fruitcake/laravel-cors": "^2.0.3", - "laravel/framework": "^9.0", - "nunomaduro/larastan": "^0.6.2", - "nunomaduro/mock-final-classes": "^1.0", - "orchestra/testbench": "^7.0", - "phpstan/phpstan": "^0.12.64", - "phpunit/phpunit": "^9.5.0" + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - } + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" }, + "type": "library", "autoload": { "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8497,100 +9096,76 @@ ], "authors": [ { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Cli error handling for console/command-line PHP applications.", + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" + "router", + "routing", + "uri", + "url" ], "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" + "source": "https://github.com/symfony/routing/tree/v5.3.7" }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2021-06-22T20:47:22+00:00" + "time": "2021-08-04T21:42:42+00:00" }, { - "name": "pestphp/pest", - "version": "v0.3.19", + "name": "symfony/service-contracts", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/pestphp/pest.git", - "reference": "26b2e3561a9f76d8918727e7bc34ddf9b977d923" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/26b2e3561a9f76d8918727e7bc34ddf9b977d923", - "reference": "26b2e3561a9f76d8918727e7bc34ddf9b977d923", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", "shasum": "" }, "require": { - "nunomaduro/collision": "^5.0", - "pestphp/pest-plugin": "^0.3", - "pestphp/pest-plugin-coverage": "^0.3", - "pestphp/pest-plugin-expectations": "^0.3.3", - "pestphp/pest-plugin-init": "^0.3", - "php": "^7.3 || ^8.0", - "phpunit/phpunit": ">= 9.3.7 <= 9.5.0" + "php": ">=7.2.5", + "psr/container": "^1.1" }, - "require-dev": { - "illuminate/console": "^7.16.1", - "illuminate/support": "^7.16.1", - "laravel/dusk": "^6.9.1", - "mockery/mockery": "^1.4.1", - "pestphp/pest-dev-tools": "dev-master" + "suggest": { + "symfony/service-implementation": "" }, - "bin": [ - "bin/pest" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "0.3.x-dev" - }, - "pest": { - "plugins": [ - "Pest\\Plugins\\Version" - ] + "dev-main": "2.4-dev" }, - "laravel": { - "providers": [ - "Pest\\Laravel\\PestServiceProvider" - ] + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Pest\\": "src/" - }, - "files": [ - "src/Functions.php", - "src/Pest.php" - ] + "Symfony\\Contracts\\Service\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8598,556 +9173,599 @@ ], "authors": [ { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "An elegant PHP Testing Framework.", + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", "keywords": [ - "framework", - "pest", - "php", - "test", - "testing", - "unit" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v0.3.19" + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-12-27T11:36:24+00:00" + "time": "2021-04-01T10:43:52+00:00" }, { - "name": "pestphp/pest-plugin", - "version": "v0.3.0", + "name": "symfony/string", + "version": "v5.3.10", "source": { "type": "git", - "url": "https://github.com/pestphp/pest-plugin.git", - "reference": "635f8c33a3eed910ac3cd5cb02a7163c5c70c033" + "url": "https://github.com/symfony/string.git", + "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/635f8c33a3eed910ac3cd5cb02a7163c5c70c033", - "reference": "635f8c33a3eed910ac3cd5cb02a7163c5c70c033", + "url": "https://api.github.com/repos/symfony/string/zipball/d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c", + "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1 || ^2.0", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "pestphp/pest": "<0.3" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" }, "require-dev": { - "composer/composer": "^1.10", - "pestphp/pest": "^0.3", - "pestphp/pest-dev-tools": "dev-master" - }, - "type": "composer-plugin", - "extra": { - "branch-alias": { - "dev-master": "0.4.x-dev" - }, - "class": "Pest\\Plugin\\Manager" + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" }, + "type": "library", "autoload": { "psr-4": { - "Pest\\Plugin\\": "src/" - } + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "The Pest plugin manager", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", "keywords": [ - "framework", - "manager", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" ], "support": { - "source": "https://github.com/pestphp/pest-plugin/tree/v0.3.0" + "source": "https://github.com/symfony/string/tree/v5.3.10" }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-08-25T20:53:40+00:00" + "time": "2021-10-27T18:21:46+00:00" }, { - "name": "pestphp/pest-plugin-coverage", - "version": "v0.3.0", + "name": "symfony/translation", + "version": "v5.3.10", "source": { "type": "git", - "url": "https://github.com/pestphp/pest-plugin-coverage.git", - "reference": "f209bb62728841f21f267759a374d66172a162ea" + "url": "https://github.com/symfony/translation.git", + "reference": "6ef197aea2ac8b9cd63e0da7522b3771714035aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-coverage/zipball/f209bb62728841f21f267759a374d66172a162ea", - "reference": "f209bb62728841f21f267759a374d66172a162ea", + "url": "https://api.github.com/repos/symfony/translation/zipball/6ef197aea2ac8b9cd63e0da7522b3771714035aa", + "reference": "6ef197aea2ac8b9cd63e0da7522b3771714035aa", "shasum": "" }, "require": { - "pestphp/pest-plugin": "^0.3", - "php": "^7.3 || ^8.0", - "sebastian/environment": "^5.1.2" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^2.3" }, "conflict": { - "pestphp/pest": "<0.3" + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.3" }, "require-dev": { - "pestphp/pest": "^0.3", - "pestphp/pest-dev-tools": "dev-master" + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.3.x-dev" - }, - "pest": { - "plugins": [ - "Pest\\PluginCoverage\\Plugin" - ] - } + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" }, + "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Pest\\PluginCoverage\\": "src/" - } + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "The Pest Coverage Plugin", - "keywords": [ - "coverage", - "framework", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", "support": { - "source": "https://github.com/pestphp/pest-plugin-coverage/tree/master" + "source": "https://github.com/symfony/translation/tree/v5.3.10" }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "abandoned": "pestphp/pest", - "time": "2020-08-25T20:42:46+00:00" + "time": "2021-10-10T06:43:24+00:00" }, { - "name": "pestphp/pest-plugin-expectations", - "version": "v0.3.3", + "name": "symfony/translation-contracts", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/pestphp/pest-plugin-expectations.git", - "reference": "1d10f8b6d2dced7accffe16eabdee44b1ef90c6a" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "95c812666f3e91db75385749fe219c5e494c7f95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-expectations/zipball/1d10f8b6d2dced7accffe16eabdee44b1ef90c6a", - "reference": "1d10f8b6d2dced7accffe16eabdee44b1ef90c6a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", + "reference": "95c812666f3e91db75385749fe219c5e494c7f95", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^9.0" + "php": ">=7.2.5" }, - "require-dev": { - "pestphp/pest": "^0.3.16", - "pestphp/pest-dev-tools": "dev-master" + "suggest": { + "symfony/translation-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.3.x-dev" + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Pest\\Expectations\\": "src/" - }, - "files": [ - "src/Autoload.php" - ] + "Symfony\\Contracts\\Translation\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Add expectations testing capabilities to Pest or PHPUnit", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", "keywords": [ - "expectations", - "framework", - "pest", - "php", - "test", - "testing", - "unit" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/pestphp/pest-plugin-expectations/tree/v0.3.3" + "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "abandoned": "pestphp/pest", - "time": "2020-12-26T20:28:03+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { - "name": "pestphp/pest-plugin-faker", - "version": "v0.3.0", + "name": "symfony/var-dumper", + "version": "v5.3.10", "source": { "type": "git", - "url": "https://github.com/pestphp/pest-plugin-faker.git", - "reference": "3a57e4803c4b6c0d0dde2ed8f0b1ca1a575001e3" + "url": "https://github.com/symfony/var-dumper.git", + "reference": "875432adb5f5570fff21036fd22aee244636b7d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-faker/zipball/3a57e4803c4b6c0d0dde2ed8f0b1ca1a575001e3", - "reference": "3a57e4803c4b6c0d0dde2ed8f0b1ca1a575001e3", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/875432adb5f5570fff21036fd22aee244636b7d1", + "reference": "875432adb5f5570fff21036fd22aee244636b7d1", "shasum": "" }, "require": { - "fzaninotto/faker": "^1.9.1", - "pestphp/pest": "^0.3", - "php": "^7.3 || ^8.0" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" }, "require-dev": { - "pestphp/pest-dev-tools": "dev-master" + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.13|^3.0.4" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.4.x-dev" - } + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", "autoload": { + "files": [ + "Resources/functions/dump.php" + ], "psr-4": { - "Pest\\Faker\\": "src/" + "Symfony\\Component\\VarDumper\\": "" }, - "files": [ - "src/Faker.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "The Pest Faker Plugin", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", "keywords": [ - "faker", - "framework", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" + "debug", + "dump" ], "support": { - "source": "https://github.com/pestphp/pest-plugin-faker/tree/master" + "source": "https://github.com/symfony/var-dumper/tree/v5.3.10" }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-08-25T20:57:25+00:00" + "time": "2021-10-26T09:30:15+00:00" }, { - "name": "pestphp/pest-plugin-init", - "version": "v0.3.1", + "name": "theseer/tokenizer", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/pestphp/pest-plugin-init.git", - "reference": "7406643b47835b6c6da709b11da89b0844b8d163" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-init/zipball/7406643b47835b6c6da709b11da89b0844b8d163", - "reference": "7406643b47835b6c6da709b11da89b0844b8d163", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { - "pestphp/pest-plugin": "^0.3", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "pestphp/pest": "<0.3" - }, - "require-dev": { - "pestphp/pest": "^0.3", - "pestphp/pest-dev-tools": "dev-master" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.4.x-dev" - }, - "pest": { - "plugins": [ - "Pest\\Init\\Plugin" - ] - } - }, "autoload": { - "psr-4": { - "Pest\\Init\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "The Pest Init plugin", - "keywords": [ - "framework", - "init", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { - "source": "https://github.com/pestphp/pest-plugin-init/tree/v0.3.1" + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/theseer", "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "abandoned": "pestphp/pest", - "time": "2020-09-27T12:48:43+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { - "name": "pestphp/pest-plugin-laravel", - "version": "v0.3.0", + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.3", "source": { "type": "git", - "url": "https://github.com/pestphp/pest-plugin-laravel.git", - "reference": "0ec53f5cc2d661088683318629ca16dcd72c41d1" + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/0ec53f5cc2d661088683318629ca16dcd72c41d1", - "reference": "0ec53f5cc2d661088683318629ca16dcd72c41d1", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", "shasum": "" }, "require": { - "laravel/framework": "^7.0 || ^8.0", - "pestphp/pest": "^0.3", - "php": "^7.3 || ^8.0" + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" }, "require-dev": { - "orchestra/testbench": "^5.2 || ^6.0", - "pestphp/pest-dev-tools": "dev-master" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.4.x-dev" + "dev-master": "2.2.x-dev" } }, "autoload": { "psr-4": { - "Pest\\Laravel\\": "src/" - }, - "files": [ - "src/Autoload.php" - ] + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "description": "The Pest Laravel Plugin", - "keywords": [ - "framework", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" + "BSD-3-Clause" ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v0.3.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, + "authors": [ { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" } ], - "time": "2020-08-25T21:08:14+00:00" + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.3" + }, + "time": "2020-07-13T06:12:54+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.1", + "name": "vinkla/hashids", + "version": "9.1.0", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "url": "https://github.com/vinkla/laravel-hashids.git", + "reference": "cb0086db96cdb49816465adc97e3a024c8ee9767" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/vinkla/laravel-hashids/zipball/cb0086db96cdb49816465adc97e3a024c8ee9767", + "reference": "cb0086db96cdb49816465adc97e3a024c8ee9767", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "graham-campbell/manager": "^4.4", + "hashids/hashids": "^4.1", + "illuminate/contracts": "^8.0", + "illuminate/support": "^8.0", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "graham-campbell/analyzer": "^3.0", + "graham-campbell/testbench": "^5.4", + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "9.1-dev" + }, + "laravel": { + "providers": [ + "Vinkla\\Hashids\\HashidsServiceProvider" + ], + "aliases": { + "Hashids": "Vinkla\\Hashids\\Facades\\Hashids" + } } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Vinkla\\Hashids\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Vincent Klaiber", + "email": "hello@doubledip.se" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "A Hashids bridge for Laravel", + "keywords": [ + "hashids", + "laravel" + ], "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "issues": "https://github.com/vinkla/laravel-hashids/issues", + "source": "https://github.com/vinkla/laravel-hashids/tree/9.1.0" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2020-11-26T19:38:22+00:00" }, { - "name": "phar-io/version", - "version": "3.1.0", + "name": "vlucas/phpdotenv", + "version": "v5.4.0", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "d4394d044ed69a8f244f3445bcedf8a0d7fe2403" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/d4394d044ed69a8f244f3445bcedf8a0d7fe2403", + "reference": "d4394d044ed69a8f244f3445bcedf8a0d7fe2403", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Dotenv\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9155,106 +9773,144 @@ ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Vance Lucas", + "email": "vance@vancelucas.com" } ], - "description": "Library for handling version information and constraints", + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.0" }, - "time": "2021-02-23T14:00:09+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-11-10T01:08:39+00:00" }, { - "name": "php-cs-fixer/diff", - "version": "v2.0.2", + "name": "voku/portable-ascii", + "version": "1.5.6", "source": { "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" + "url": "https://github.com/voku/portable-ascii.git", + "reference": "80953678b19901e5165c56752d087fc11526017c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", + "reference": "80953678b19901e5165c56752d087fc11526017c", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0 || ^8.0" + "php": ">=7.0.0" }, "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "voku\\": "src/voku/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" } ], - "description": "sebastian/diff v3 backport support for PHP 5.6+", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" - }, - "time": "2020-10-14T08:32:19+00:00" + "time": "2020-11-12T00:07:28+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "webmozart/assert", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" }, "type": "library", "extra": { "branch-alias": { - "dev-2.x": "2.x-dev" + "dev-master": "1.10-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -9263,58 +9919,78 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "assert", + "check", + "validate" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "time": "2020-06-27T09:03:43+00:00" - }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "packages-dev": [ { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "name": "barryvdh/laravel-ide-helper", + "version": "v2.10.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "url": "https://github.com/barryvdh/laravel-ide-helper.git", + "reference": "73b1012b927633a1b4cd623c2e6b1678e6faef08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/73b1012b927633a1b4cd623c2e6b1678e6faef08", + "reference": "73b1012b927633a1b4cd623c2e6b1678e6faef08", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "barryvdh/reflection-docblock": "^2.0.6", + "composer/composer": "^1.6 || ^2", + "doctrine/dbal": "^2.6 || ^3", + "ext-json": "*", + "illuminate/console": "^8", + "illuminate/filesystem": "^8", + "illuminate/support": "^8", + "nikic/php-parser": "^4.7", + "php": "^7.3 || ^8.0", + "phpdocumentor/type-resolver": "^1.1.0" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "ext-pdo_sqlite": "*", + "friendsofphp/php-cs-fixer": "^2", + "illuminate/config": "^8", + "illuminate/view": "^8", + "mockery/mockery": "^1.4", + "orchestra/testbench": "^6", + "phpunit/phpunit": "^8.5 || ^9", + "spatie/phpunit-snapshot-assertions": "^3 || ^4", + "vimeo/psalm": "^3.12" + }, + "suggest": { + "illuminate/events": "Required for automatic helper generation (^6|^7|^8)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-master": "2.9-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider" + ] } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "Barryvdh\\LaravelIdeHelper\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9323,51 +9999,69 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "description": "Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.", + "keywords": [ + "autocomplete", + "codeintel", + "helper", + "ide", + "laravel", + "netbeans", + "phpdoc", + "phpstorm", + "sublime" + ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.10.0" }, - "time": "2020-09-03T19:13:55+00:00" + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2021-04-09T06:17:55+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "name": "barryvdh/reflection-docblock", + "version": "v2.0.6", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "url": "https://github.com/barryvdh/ReflectionDocBlock.git", + "reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/6b69015d83d3daf9004a71a89f26e27d27ef6a16", + "reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "php": ">=5.3.3" }, "require-dev": { - "ext-tokenizer": "*" + "phpunit/phpunit": "~4.0,<4.5" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "psr-0": { + "Barryvdh": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -9377,51 +10071,54 @@ "authors": [ { "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "email": "mike.vanriel@naenius.com" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.0.6" }, - "time": "2020-09-17T18:55:26+00:00" + "time": "2018-12-13T10:34:14+00:00" }, { - "name": "phpspec/prophecy", - "version": "1.13.0", + "name": "beyondcode/laravel-dump-server", + "version": "1.7.0", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + "url": "https://github.com/beyondcode/laravel-dump-server.git", + "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/e27c7b942ab62f6ac7168359393d328ec5215b89", + "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "php": ">=7.2.5", + "symfony/var-dumper": "^5.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "larapack/dd": "^1.0", + "phpunit/phpunit": "^7.0|^9.3" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" + "laravel": { + "providers": [ + "BeyondCode\\DumpServer\\DumpServerServiceProvider" + ] } }, "autoload": { "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "BeyondCode\\DumpServer\\": "src" + }, + "files": [ + "helpers.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9429,478 +10126,547 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "name": "Marcel Pociot", + "email": "marcel@beyondco.de", + "homepage": "https://beyondco.de", + "role": "Developer" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", + "description": "Symfony Var-Dump Server for Laravel", + "homepage": "https://github.com/beyondcode/laravel-dump-server", "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "beyondcode", + "laravel-dump-server" ], "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + "issues": "https://github.com/beyondcode/laravel-dump-server/issues", + "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.7.0" }, - "time": "2021-03-17T13:42:18+00:00" + "time": "2020-12-15T10:57:43+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "9.2.6", + "name": "brianium/paratest", + "version": "v6.3.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" + "url": "https://github.com/paratestphp/paratest.git", + "reference": "5843dced0fb11c67fa3863e9ad40cfc319c32f33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/5843dced0fb11c67fa3863e9ad40cfc319c32f33", + "reference": "5843dced0fb11c67fa3863e9ad40cfc319c32f33", "shasum": "" }, "require": { "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcre": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "php": "^7.3 || ^8.0", + "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-timer": "^5.0.3", + "phpunit/phpunit": "^9.5.10", + "sebastian/environment": "^5.1.3", + "symfony/console": "^4.4.30 || ^5.3.7", + "symfony/process": "^4.4.30 || ^5.3.7" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } + "require-dev": { + "doctrine/coding-standard": "^9.0.0", + "ekino/phpstan-banned-code": "^0.5.0", + "ergebnis/phpstan-rules": "^0.15.3", + "ext-posix": "*", + "infection/infection": "^0.25.3", + "phpstan/phpstan": "^0.12.99", + "phpstan/phpstan-deprecation-rules": "^0.12.6", + "phpstan/phpstan-phpunit": "^0.12.22", + "phpstan/phpstan-strict-rules": "^0.12.11", + "squizlabs/php_codesniffer": "^3.6.0", + "symfony/filesystem": "^5.3.4", + "thecodingmachine/phpstan-strict-rules": "^0.12.1", + "vimeo/psalm": "^4.10.0" }, + "bin": [ + "bin/paratest" + ], + "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "ParaTest\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "role": "Developer" + }, + { + "name": "Filippo Tessarotto", + "email": "zoeslam@gmail.com", + "role": "Developer" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "Parallel testing for PHP", + "homepage": "https://github.com/paratestphp/paratest", "keywords": [ - "coverage", - "testing", - "xunit" + "concurrent", + "parallel", + "phpunit", + "testing" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + "issues": "https://github.com/paratestphp/paratest/issues", + "source": "https://github.com/paratestphp/paratest/tree/v6.3.2" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/sponsors/Slamdunk", "type": "github" + }, + { + "url": "https://paypal.me/filippotessarotto", + "type": "paypal" } ], - "time": "2021-03-28T07:26:59+00:00" + "time": "2021-11-03T10:16:06+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "name": "composer/ca-bundle", + "version": "1.3.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "url": "https://github.com/composer/ca-bundle.git", + "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b", + "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpstan/phpstan": "^0.12.55", + "psr/log": "^1.0", + "symfony/phpunit-bridge": "^4.2 || ^5", + "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "1.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\CaBundle\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", "keywords": [ - "filesystem", - "iterator" + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/ca-bundle/issues", + "source": "https://github.com/composer/ca-bundle/tree/1.3.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-10-28T20:44:15+00:00" }, { - "name": "phpunit/php-invoker", - "version": "3.1.1", + "name": "composer/composer", + "version": "2.1.12", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "url": "https://github.com/composer/composer.git", + "reference": "6e3c2b122e0ec41a7e885fcaf19fa15e2e0819a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/composer/composer/zipball/6e3c2b122e0ec41a7e885fcaf19fa15e2e0819a0", + "reference": "6e3c2b122e0ec41a7e885fcaf19fa15e2e0819a0", "shasum": "" }, "require": { - "php": ">=7.3" + "composer/ca-bundle": "^1.0", + "composer/metadata-minifier": "^1.0", + "composer/semver": "^3.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^2.0", + "justinrainbow/json-schema": "^5.2.11", + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0 || ^2.0", + "react/promise": "^1.2 || ^2.7", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" }, "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpspec/prophecy": "^1.10", + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" }, "suggest": { - "ext-pcntl": "*" + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" }, + "bin": [ + "bin/composer" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "2.1-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\": "src/Composer" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "https://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" } ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", "keywords": [ - "process" + "autoload", + "dependency", + "package" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/composer/issues", + "source": "https://github.com/composer/composer/tree/2.1.12" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2021-11-09T15:02:04+00:00" }, { - "name": "phpunit/php-text-template", - "version": "2.0.4", + "name": "composer/metadata-minifier", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "url": "https://github.com/composer/metadata-minifier.git", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "composer/composer": "^2", + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "1.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\MetadataMinifier\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Small utility library that handles metadata minification and expansion.", "keywords": [ - "template" + "composer", + "compression" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "issues": "https://github.com/composer/metadata-minifier/issues", + "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2021-04-07T13:37:33+00:00" }, { - "name": "phpunit/php-timer", - "version": "5.0.3", + "name": "composer/semver", + "version": "3.2.6", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "url": "https://github.com/composer/semver.git", + "reference": "83e511e247de329283478496f7a1e114c9517506" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506", + "reference": "83e511e247de329283478496f7a1e114c9517506", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpstan/phpstan": "^0.12.54", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "3.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\Semver\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ - "timer" + "semantic", + "semver", + "validation", + "versioning" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.2.6" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2021-10-25T11:34:17+00:00" }, { - "name": "phpunit/phpunit", - "version": "9.5.0", + "name": "composer/spdx-licenses", + "version": "1.5.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "de30328a7af8680efdc03e396aad24befd513200" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/de30328a7af8680efdc03e396aad24befd513200", + "reference": "de30328a7af8680efdc03e396aad24befd513200", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", - "sebastian/version": "^3.0.2" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-main": "1.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" - ] + "psr-4": { + "Composer\\Spdx\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", + "description": "SPDX licenses list and validation library.", "keywords": [ - "phpunit", - "testing", - "xunit" + "license", + "spdx", + "validator" ], "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.0" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/spdx-licenses/issues", + "source": "https://github.com/composer/spdx-licenses/tree/1.5.5" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://packagist.com", "type": "custom" }, { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2020-12-04T05:05:53+00:00" + "time": "2020-12-03T16:04:16+00:00" }, { - "name": "psr/cache", - "version": "1.0.1", + "name": "composer/xdebug-handler", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Cache\\": "src/" + "Composer\\XdebugHandler\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9909,49 +10675,68 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Common interface for caching libraries", + "description": "Restarts a process without Xdebug.", "keywords": [ - "cache", - "psr", - "psr-6" + "Xdebug", + "performance" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.2" }, - "time": "2016-08-06T20:24:11+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-07-31T17:03:58+00:00" }, { - "name": "react/promise", - "version": "v2.8.0", + "name": "doctrine/annotations", + "version": "1.13.2", "source": { "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" + "url": "https://github.com/doctrine/annotations.git", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", "shasum": "" }, "require": { - "php": ">=5.4.0" + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" }, "type": "library", "autoload": { "psr-4": { - "React\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9959,40 +10744,65 @@ ], "authors": [ { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", "keywords": [ - "promise", - "promises" + "annotations", + "docblock", + "parser" ], "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.8.0" + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" }, - "time": "2020-05-12T15:16:56+00:00" + "time": "2021-08-05T19:00:23+00:00" }, { - "name": "sebastian/cli-parser", - "version": "1.0.1", + "name": "facade/flare-client-php", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "url": "https://github.com/facade/flare-client-php.git", + "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed", + "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed", "shasum": "" }, "require": { - "php": ">=7.3" + "facade/ignition-contracts": "~1.0", + "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", + "php": "^7.1|^8.0", + "symfony/http-foundation": "^3.3|^4.1|^5.0", + "symfony/mime": "^3.4|^4.0|^5.1", + "symfony/var-dumper": "^3.4|^4.0|^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "friendsofphp/php-cs-fixer": "^2.14", + "phpunit/phpunit": "^7.5.16", + "spatie/phpunit-snapshot-assertions": "^2.0" }, "type": "library", "extra": { @@ -10001,805 +10811,988 @@ } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Facade\\FlareClient\\": "src" + }, + "files": [ + "src/helpers.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/facade/flare-client-php", + "keywords": [ + "exception", + "facade", + "flare", + "reporting" ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "issues": "https://github.com/facade/flare-client-php/issues", + "source": "https://github.com/facade/flare-client-php/tree/1.9.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/spatie", "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2021-09-13T12:16:46+00:00" }, { - "name": "sebastian/code-unit", - "version": "1.0.8", + "name": "facade/ignition", + "version": "2.16.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "url": "https://github.com/facade/ignition.git", + "reference": "23400e6cc565c9dcae2c53704b4de1c4870c0697" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/facade/ignition/zipball/23400e6cc565c9dcae2c53704b4de1c4870c0697", + "reference": "23400e6cc565c9dcae2c53704b4de1c4870c0697", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "facade/flare-client-php": "^1.9.1", + "facade/ignition-contracts": "^1.0.2", + "illuminate/support": "^7.0|^8.0", + "monolog/monolog": "^2.0", + "php": "^7.2.5|^8.0", + "symfony/console": "^5.0", + "symfony/var-dumper": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "friendsofphp/php-cs-fixer": "^2.14", + "mockery/mockery": "^1.3", + "orchestra/testbench": "^5.0|^6.0", + "psalm/plugin-laravel": "^1.2" + }, + "suggest": { + "laravel/telescope": "^3.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Facade\\Ignition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Facade\\Ignition\\Facades\\Flare" + } } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Facade\\Ignition\\": "src" + }, + "files": [ + "src/helpers.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://github.com/facade/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/facade/ignition/issues", + "source": "https://github.com/facade/ignition" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2021-10-28T11:47:23+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "name": "facade/ignition-contracts", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^7.3|^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2020-10-16T08:27:54+00:00" }, { - "name": "sebastian/comparator", - "version": "4.0.6", + "name": "fakerphp/faker", + "version": "v1.9.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "84220cf137a9344acffb10374e781fed785ff307" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/84220cf137a9344acffb10374e781fed785ff307", + "reference": "84220cf137a9344acffb10374e781fed785ff307", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "php": "^5.3.3 || ^7.0" + }, + "conflict": { + "ergebnis/faker": "!=1.9.2", + "fzaninotto/faker": "!=1.9.2" + }, + "replace": { + "ergebnis/faker": "1.9.2", + "fzaninotto/faker": "1.9.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Faker\\": "src/Faker/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "François Zaninotto" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "description": "Faker is a PHP library that generates fake data for you.", "keywords": [ - "comparator", - "compare", - "equality" + "data", + "faker", + "fixtures" ], "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.9.2" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2020-12-11T14:32:13+00:00" }, { - "name": "sebastian/complexity", - "version": "2.0.2", + "name": "filp/whoops", + "version": "2.14.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "url": "https://github.com/filp/whoops.git", + "reference": "f056f1fe935d9ed86e698905a957334029899895" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/filp/whoops/zipball/f056f1fe935d9ed86e698905a957334029899895", + "reference": "f056f1fe935d9ed86e698905a957334029899895", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.7-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Whoops\\": "src/Whoops/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" } ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.4" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/denis-sokolov", "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2021-10-03T12:00:00+00:00" }, { - "name": "sebastian/diff", - "version": "4.0.4", + "name": "friendsofphp/php-cs-fixer", + "version": "v3.2.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "13ae36a76b6e329e44ca3cafaa784ea02db9ff14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/13ae36a76b6e329e44ca3cafaa784ea02db9ff14", + "reference": "13ae36a76b6e329e44ca3cafaa784ea02db9ff14", "shasum": "" }, "require": { - "php": ">=7.3" + "composer/semver": "^3.2", + "composer/xdebug-handler": "^2.0", + "doctrine/annotations": "^1.12", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "php-cs-fixer/diff": "^2.0", + "symfony/console": "^4.4.20 || ^5.1.3", + "symfony/event-dispatcher": "^4.4.20 || ^5.0", + "symfony/filesystem": "^4.4.20 || ^5.0", + "symfony/finder": "^4.4.20 || ^5.0", + "symfony/options-resolver": "^4.4.20 || ^5.0", + "symfony/polyfill-php72": "^1.23", + "symfony/polyfill-php80": "^1.23", + "symfony/polyfill-php81": "^1.23", + "symfony/process": "^4.4.20 || ^5.0", + "symfony/stopwatch": "^4.4.20 || ^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.8", + "php-coveralls/php-coveralls": "^2.4.3", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.10.3", + "phpspec/prophecy-phpunit": "^1.1 || ^2.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^5.2.4", + "symfony/yaml": "^4.4.20 || ^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PhpCsFixer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], + "description": "A tool to automatically fix PHP code style", "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.2.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/keradus", "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2021-10-05T08:12:17+00:00" }, { - "name": "sebastian/environment", - "version": "5.1.3", + "name": "justinrainbow/json-schema", + "version": "5.2.11", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa", + "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" }, + "bin": [ + "bin/validate-json" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "json", + "schema" ], "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "issues": "https://github.com/justinrainbow/json-schema/issues", + "source": "https://github.com/justinrainbow/json-schema/tree/5.2.11" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2021-07-22T09:24:00+00:00" }, { - "name": "sebastian/exporter", - "version": "4.0.3", + "name": "nunomaduro/collision", + "version": "v5.10.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + "url": "https://github.com/nunomaduro/collision.git", + "reference": "3004cfa49c022183395eabc6d0e5207dfe498d00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/3004cfa49c022183395eabc6d0e5207dfe498d00", + "reference": "3004cfa49c022183395eabc6d0e5207dfe498d00", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.14.3", + "php": "^7.3 || ^8.0", + "symfony/console": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "brianium/paratest": "^6.1", + "fideloper/proxy": "^4.4.1", + "fruitcake/laravel-cors": "^2.0.3", + "laravel/framework": "8.x-dev", + "nunomaduro/larastan": "^0.6.2", + "nunomaduro/mock-final-classes": "^1.0", + "orchestra/testbench": "^6.0", + "phpstan/phpstan": "^0.12.64", + "phpunit/phpunit": "^9.5.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "4.0-dev" + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "description": "Cli error handling for console/command-line PHP applications.", "keywords": [ - "export", - "exporter" + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" ], "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2020-09-28T05:24:23+00:00" + "time": "2021-09-20T15:06:32+00:00" }, { - "name": "sebastian/global-state", - "version": "5.0.3", + "name": "pestphp/pest", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "url": "https://github.com/pestphp/pest.git", + "reference": "ba06c5a76d95bbdef93aa4e05b489c3335b6c8c1" }, "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest/zipball/ba06c5a76d95bbdef93aa4e05b489c3335b6c8c1", + "reference": "ba06c5a76d95bbdef93aa4e05b489c3335b6c8c1", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "nunomaduro/collision": "^5.4.0|^6.0", + "pestphp/pest-plugin": "^1.0.0", + "php": "^7.3 || ^8.0", + "phpunit/phpunit": "^9.5.5" }, "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "illuminate/console": "^8.47.0", + "illuminate/support": "^8.47.0", + "laravel/dusk": "^6.15.0", + "pestphp/pest-dev-tools": "dev-master", + "pestphp/pest-plugin-parallel": "^1.0" }, + "bin": [ + "bin/pest" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "1.x-dev" + }, + "pest": { + "plugins": [ + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Environment" + ] + }, + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Pest\\": "src/" + }, + "files": [ + "src/Functions.php", + "src/Pest.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "An elegant PHP Testing Framework.", "keywords": [ - "global state" + "framework", + "pest", + "php", + "test", + "testing", + "unit" ], "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "issues": "https://github.com/pestphp/pest/issues", + "source": "https://github.com/pestphp/pest/tree/v1.20.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/lukeraymonddowning", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/octoper", + "type": "github" + }, + { + "url": "https://github.com/olivernybroe", + "type": "github" + }, + { + "url": "https://github.com/owenvoke", "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2021-09-25T12:52:12+00:00" }, { - "name": "sebastian/lines-of-code", - "version": "1.0.3", + "name": "pestphp/pest-plugin", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "fc8519de148699fe612d9c669be60554cd2db4fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/fc8519de148699fe612d9c669be60554cd2db4fa", + "reference": "fc8519de148699fe612d9c669be60554cd2db4fa", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "composer-plugin-api": "^1.1 || ^2.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "pestphp/pest": "<1.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "composer/composer": "^1.10.19", + "pestphp/pest": "^1.0", + "pestphp/pest-dev-tools": "dev-master" }, - "type": "library", + "type": "composer-plugin", "extra": { "branch-alias": { - "dev-master": "1.0-dev" - } + "dev-master": "1.x-dev" + }, + "class": "Pest\\Plugin\\Manager" }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Pest\\Plugin\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "description": "The Pest plugin manager", + "keywords": [ + "framework", + "manager", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/pestphp/pest-plugin/tree/v1.0.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2021-01-03T15:53:42+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "4.0.4", + "name": "pestphp/pest-plugin-faker", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "url": "https://github.com/pestphp/pest-plugin-faker.git", + "reference": "9d93419f1f47ffd856ee544317b2f9144a129044" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/pestphp/pest-plugin-faker/zipball/9d93419f1f47ffd856ee544317b2f9144a129044", + "reference": "9d93419f1f47ffd856ee544317b2f9144a129044", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "fakerphp/faker": "^1.9.1", + "pestphp/pest": "^1.0", + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "pestphp/pest-dev-tools": "dev-master" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Pest\\Faker\\": "src/" + }, + "files": [ + "src/Faker.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } + "description": "The Pest Faker Plugin", + "keywords": [ + "faker", + "framework", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/pestphp/pest-plugin-faker/tree/v1.0.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2021-01-03T15:42:35+00:00" }, { - "name": "sebastian/object-reflector", - "version": "2.0.4", + "name": "pestphp/pest-plugin-laravel", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "url": "https://github.com/pestphp/pest-plugin-laravel.git", + "reference": "bacc1ef1f537cf9adf692b6930e54f607ae530ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/bacc1ef1f537cf9adf692b6930e54f607ae530ad", + "reference": "bacc1ef1f537cf9adf692b6930e54f607ae530ad", "shasum": "" }, "require": { - "php": ">=7.3" + "laravel/framework": "^7.0 || ^8.0", + "pestphp/pest": "^1.7", + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "orchestra/testbench": "^5.12.1 || ^6.7.2", + "pestphp/pest-dev-tools": "dev-master" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Pest\\Laravel\\": "src/" + }, + "files": [ + "src/Autoload.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } + "description": "The Pest Laravel Plugin", + "keywords": [ + "framework", + "laravel", + "pest", + "php", + "test", + "testing", + "unit" ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v1.1.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2021-07-07T09:11:42+00:00" }, { - "name": "sebastian/recursion-context", - "version": "4.0.4", + "name": "pestphp/pest-plugin-parallel", + "version": "v0.2.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "url": "https://github.com/pestphp/pest-plugin-parallel.git", + "reference": "6da63df8878cc279b0ff78aa78a1c5f04f054677" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/pestphp/pest-plugin-parallel/zipball/6da63df8878cc279b0ff78aa78a1c5f04f054677", + "reference": "6da63df8878cc279b0ff78aa78a1c5f04f054677", "shasum": "" }, "require": { - "php": ">=7.3" + "brianium/paratest": "^6.3", + "pestphp/pest-plugin": "^1.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "laravel/framework": "<8.55", + "nunomaduro/collision": "<5.8", + "pestphp/pest": "<1.16" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "pestphp/pest": "dev-master", + "pestphp/pest-dev-tools": "dev-master" }, "type": "library", "extra": { + "pest": { + "plugins": [ + "Pest\\Parallel\\Plugin" + ] + }, "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Pest\\Parallel\\": "src/" + }, + "exclude-from-classmap": [ + "ParaTest\\Runners\\PHPUnit\\Worker\\RunnerWorker", + "ParaTest\\Runners\\PHPUnit\\BaseRunner" + ], + "files": [ + "src/Autoload.php", + "build/RunnerWorker.php", + "build/BaseRunner.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ + "description": "The Pest Parallel Plugin", + "keywords": [ + "framework", + "parallel", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-parallel/tree/v0.2.1" + }, + "funding": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" }, { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "url": "https://github.com/lukeraymonddowning", + "type": "github" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ + "url": "https://github.com/nunomaduro", + "type": "github" + }, { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/octoper", + "type": "github" + }, + { + "url": "https://github.com/olivernybroe", + "type": "github" + }, + { + "url": "https://github.com/owenvoke", "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2021-08-25T11:03:56+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "php-cs-fixer/diff", + "version": "v2.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, "autoload": { "classmap": [ "src/" @@ -10813,130 +11806,121 @@ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "sebastian/diff v3 backport support for PHP 5.6+", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2020-10-14T08:32:19+00:00" }, { - "name": "sebastian/type", - "version": "2.3.4", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Cache\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/php-fig/cache/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2016-08-06T20:24:11+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "react/promise", + "version": "v2.8.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/reactphp/promise.git", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=5.4.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "require-dev": { + "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v2.8.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2020-05-12T15:16:56+00:00" }, { "name": "seld/jsonlint", @@ -11003,16 +11987,16 @@ }, { "name": "seld/phar-utils", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796" + "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796", - "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/749042a2315705d2dfbbc59234dd9ceb22bf3ff0", + "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0", "shasum": "" }, "require": { @@ -11045,27 +12029,28 @@ ], "support": { "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/master" + "source": "https://github.com/Seldaek/phar-utils/tree/1.1.2" }, - "time": "2020-07-07T18:42:57+00:00" + "time": "2021-08-19T21:01:38+00:00" }, { "name": "symfony/filesystem", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "348116319d7fb7d1faa781d26a48922428013eb2" + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/348116319d7fb7d1faa781d26a48922428013eb2", - "reference": "348116319d7fb7d1faa781d26a48922428013eb2", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32", + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -11093,7 +12078,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.3.0" + "source": "https://github.com/symfony/filesystem/tree/v5.3.4" }, "funding": [ { @@ -11109,27 +12094,27 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-07-21T12:40:44+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.3.0", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5" + "reference": "4b78e55b179003a42523a362cc0e8327f7a69b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/162e886ca035869866d233a2bfef70cc28f9bbe5", - "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/4b78e55b179003a42523a362cc0e8327f7a69b5e", + "reference": "4b78e55b179003a42523a362cc0e8327f7a69b5e", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -11162,7 +12147,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.3.0" + "source": "https://github.com/symfony/options-resolver/tree/v5.3.7" }, "funding": [ { @@ -11178,20 +12163,20 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "313d02f59d6543311865007e5ff4ace05b35ee65" + "reference": "b24c6a92c6db316fee69e38c80591e080e41536c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/313d02f59d6543311865007e5ff4ace05b35ee65", - "reference": "313d02f59d6543311865007e5ff4ace05b35ee65", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b24c6a92c6db316fee69e38c80591e080e41536c", + "reference": "b24c6a92c6db316fee69e38c80591e080e41536c", "shasum": "" }, "require": { @@ -11224,7 +12209,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.3.0" + "source": "https://github.com/symfony/stopwatch/tree/v5.3.4" }, "funding": [ { @@ -11240,57 +12225,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-10T08:58:57+00:00" } ], "aliases": [], @@ -11302,5 +12237,5 @@ "php": "^7.4 || ^8.0" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.0.0" } diff --git a/config/abilities.php b/config/abilities.php new file mode 100644 index 000000000..278050ad9 --- /dev/null +++ b/config/abilities.php @@ -0,0 +1,420 @@ + [ + + // Customer + [ + "name" => "view customer", + "ability" => "view-customer", + "model" => Customer::class, + ], + [ + "name" => "create customer", + "ability" => "create-customer", + "model" => Customer::class, + "depends_on" => [ + 'view-customer', + 'view-custom-field', + ] + ], + [ + "name" => "edit customer", + "ability" => "edit-customer", + "model" => Customer::class, + "depends_on" => [ + 'view-customer', + 'view-custom-field', + ] + ], + [ + "name" => "delete customer", + "ability" => "delete-customer", + "model" => Customer::class, + "depends_on" => [ + 'view-customer', + ] + ], + + // Item + [ + "name" => "view item", + "ability" => "view-item", + "model" => Item::class, + ], + [ + "name" => "create item", + "ability" => "create-item", + "model" => Item::class, + "depends_on" => [ + 'view-item', + 'view-tax-type' + ] + ], + [ + "name" => "edit item", + "ability" => "edit-item", + "model" => Item::class, + "depends_on" => [ + 'view-item', + ] + ], + [ + "name" => "delete item", + "ability" => "delete-item", + "model" => Item::class, + "depends_on" => [ + 'view-item', + ] + ], + + // Tax Type + [ + "name" => "view tax type", + "ability" => "view-tax-type", + "model" => TaxType::class, + ], + [ + "name" => "create tax type", + "ability" => "create-tax-type", + "model" => TaxType::class, + "depends_on" => [ + 'view-tax-type', + ] + ], + [ + "name" => "edit tax type", + "ability" => "edit-tax-type", + "model" => TaxType::class, + "depends_on" => [ + 'view-tax-type', + ] + ], + [ + "name" => "delete tax type", + "ability" => "delete-tax-type", + "model" => TaxType::class, + "depends_on" => [ + 'view-tax-type', + ] + ], + + // Estimate + [ + "name" => "view estimate", + "ability" => "view-estimate", + "model" => Estimate::class, + ], + [ + "name" => "create estimate", + "ability" => "create-estimate", + "model" => Estimate::class, + "depends_on" => [ + 'view-estimate', + 'view-item', + 'view-tax-type', + 'view-customer', + 'view-custom-field', + 'view-all-notes' + ] + ], + [ + "name" => "edit estimate", + "ability" => "edit-estimate", + "model" => Estimate::class, + "depends_on" => [ + 'view-item', + 'view-estimate', + 'view-tax-type', + 'view-customer', + 'view-custom-field', + 'view-all-notes' + ] + ], + [ + "name" => "delete estimate", + "ability" => "delete-estimate", + "model" => Estimate::class, + "depends_on" => [ + 'view-estimate', + ] + ], + [ + "name" => "send estimate", + "ability" => "send-estimate", + "model" => Estimate::class, + ], + + // Invoice + [ + "name" => "view invoice", + "ability" => "view-invoice", + "model" => Invoice::class, + ], + [ + "name" => "create invoice", + "ability" => "create-invoice", + "model" => Invoice::class, + 'owner_only' => false, + "depends_on" => [ + 'view-item', + 'view-invoice', + 'view-tax-type', + 'view-customer', + 'view-custom-field', + 'view-all-notes' + ] + ], + [ + "name" => "edit invoice", + "ability" => "edit-invoice", + "model" => Invoice::class, + "depends_on" => [ + 'view-item', + 'view-invoice', + 'view-tax-type', + 'view-customer', + 'view-custom-field', + 'view-all-notes' + ] + ], + [ + "name" => "delete invoice", + "ability" => "delete-invoice", + "model" => Invoice::class, + "depends_on" => [ + 'view-invoice' + ] + ], + [ + "name" => "send invoice", + "ability" => "send-invoice", + "model" => Invoice::class, + ], + + // Recurring Invoice + [ + "name" => "view recurring invoice", + "ability" => "view-recurring-invoice", + "model" => RecurringInvoice::class, + ], + [ + "name" => "create recurring invoice", + "ability" => "create-recurring-invoice", + "model" => RecurringInvoice::class, + "depends_on" => [ + 'view-item', + 'view-recurring-invoice', + 'view-tax-type', + 'view-customer', + 'view-all-notes', + 'send-invoice' + ] + ], + [ + "name" => "edit recurring invoice", + "ability" => "edit-recurring-invoice", + "model" => RecurringInvoice::class, + "depends_on" => [ + 'view-item', + 'view-recurring-invoice', + 'view-tax-type', + 'view-customer', + 'view-all-notes', + 'send-invoice' + ] + ], + [ + "name" => "delete recurring invoice", + "ability" => "delete-recurring-invoice", + "model" => RecurringInvoice::class, + "depends_on" => [ + 'view-recurring-invoice', + ] + ], + + // Payment + [ + "name" => "view payment", + "ability" => "view-payment", + "model" => Payment::class, + ], + [ + "name" => "create payment", + "ability" => "create-payment", + "model" => Payment::class, + "depends_on" => [ + 'view-customer', + 'view-payment', + 'view-invoice', + 'view-custom-field', + 'view-all-notes' + ] + ], + [ + "name" => "edit payment", + "ability" => "edit-payment", + "model" => Payment::class, + "depends_on" => [ + 'view-customer', + 'view-payment', + 'view-invoice', + 'view-custom-field', + 'view-all-notes' + ] + ], + [ + "name" => "delete payment", + "ability" => "delete-payment", + "model" => Payment::class, + "depends_on" => [ + 'view-payment', + ] + ], + [ + "name" => "send payment", + "ability" => "send-payment", + "model" => Payment::class, + ], + + // Expense + [ + "name" => "view expense", + "ability" => "view-expense", + "model" => Expense::class, + ], + [ + "name" => "create expense", + "ability" => "create-expense", + "model" => Expense::class, + "depends_on" => [ + 'view-customer', + 'view-expense', + 'view-custom-field', + ] + ], + [ + "name" => "edit expense", + "ability" => "edit-expense", + "model" => Expense::class, + "depends_on" => [ + 'view-customer', + 'view-expense', + 'view-custom-field', + ] + ], + [ + "name" => "delete expense", + "ability" => "delete-expense", + "model" => Expense::class, + "depends_on" => [ + 'view-expense', + ] + ], + + // Custom Field + [ + "name" => "view custom field", + "ability" => "view-custom-field", + "model" => CustomField::class, + ], + [ + "name" => "create custom field", + "ability" => "create-custom-field", + "model" => CustomField::class, + "depends_on" => [ + 'view-custom-field', + ] + ], + [ + "name" => "edit custom field", + "ability" => "edit-custom-field", + "model" => CustomField::class, + "depends_on" => [ + 'view-custom-field', + ] + ], + [ + "name" => "delete custom field", + "ability" => "delete-custom-field", + "model" => CustomField::class, + "depends_on" => [ + 'view-custom-field', + ] + ], + + // Financial Reports + [ + "name" => "view financial reports", + "ability" => "view-financial-reports", + "model" => null, + ], + + // Exchange Rate Provider + [ + "name" => "view exchange rate provider", + "ability" => "view-exchange-rate-provider", + "model" => ExchangeRateProvider::class, + 'owner_only' => false, + ], + [ + "name" => "create exchange rate provider", + "ability" => "create-exchange-rate-provider", + "model" => ExchangeRateProvider::class, + 'owner_only' => false, + "depends_on" => [ + 'view-exchange-rate-provider', + ] + ], + [ + "name" => "edit exchange rate provider", + "ability" => "edit-exchange-rate-provider", + "model" => ExchangeRateProvider::class, + 'owner_only' => false, + "depends_on" => [ + 'view-exchange-rate-provider', + ] + ], + [ + "name" => "delete exchange rate provider", + "ability" => "delete-exchange-rate-provider", + "model" => ExchangeRateProvider::class, + 'owner_only' => false, + "depends_on" => [ + 'view-exchange-rate-provider', + ] + ], + + // Settings + [ + "name" => "view company dashboard", + "ability" => "dashboard", + "model" => null, + ], + [ + "name" => "view all notes", + "ability" => "view-all-notes", + "model" => Note::class, + ], + [ + "name" => "manage notes", + "ability" => "manage-all-notes", + "model" => Note::class, + "depends_on" => [ + 'view-all-notes' + ] + ] + ] +]; diff --git a/config/app.php b/config/app.php index 89e4ed1cc..51c45a922 100644 --- a/config/app.php +++ b/config/app.php @@ -157,6 +157,7 @@ Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, + Lavary\Menu\ServiceProvider::class, /* * Application Service Providers... @@ -219,5 +220,6 @@ 'Flash' => Laracasts\Flash\Flash::class, // 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class, 'Pusher' => Pusher\Pusher::class, + 'Menu' => Lavary\Menu\Facade::class ], ]; diff --git a/config/auth.php b/config/auth.php index c562337e8..1bf00be7b 100644 --- a/config/auth.php +++ b/config/auth.php @@ -46,6 +46,12 @@ 'provider' => 'users', 'hash' => false, ], + + 'customer' => [ + 'driver' => 'sanctum', + 'provider' => 'customers', + 'hash' => false, + ], ], /* @@ -71,10 +77,10 @@ 'model' => \Crater\Models\User::class, ], - // 'users' => [ - // 'driver' => 'database', - // 'table' => 'users', - // ], + 'customers' => [ + 'driver' => 'eloquent', + 'model' => \Crater\Models\Customer::class, + ], ], /* @@ -99,6 +105,13 @@ 'expire' => 60, 'throttle' => 60, ], + + 'customers' => [ + 'provider' => 'customers', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], ], /* diff --git a/config/crater.php b/config/crater.php index 4bae37ff9..0a98bfab5 100644 --- a/config/crater.php +++ b/config/crater.php @@ -1,5 +1,17 @@ 'november-october' , 'value' => '11-10'], ['key' => 'december-november', 'value' => '12-11'], ], + + /* + * List of convert estimate options + */ + 'convert_estimate_options' => [ + ['key' => 'settings.preferences.no_action', 'value' => 'no_action'], + ['key' => 'settings.preferences.delete_estimate', 'value' => 'delete_estimate'], + ['key' => 'settings.preferences.mark_estimate_as_accepted', 'value' => 'mark_estimate_as_accepted'], + ], + + /* + * List of retrospective edits + */ + 'retrospective_edits' => [ + ['key' => 'settings.preferences.allow', 'value' => 'allow'], + ['key' => 'settings.preferences.disable_on_invoice_partial_paid', 'value' => 'disable_on_invoice_partial_paid'], + ['key' => 'settings.preferences.disable_on_invoice_paid', 'value' => 'disable_on_invoice_paid'], + ['key' => 'settings.preferences.disable_on_invoice_sent', 'value' => 'disable_on_invoice_sent'], + ], + + /* + * List of setting menu + */ + 'setting_menu' => [ + [ + 'title' => 'settings.menu_title.account_settings', + 'group' => '', + 'name' => 'Account Settings', + 'link' => '/admin/settings/account-settings', + 'icon' => 'UserIcon', + 'owner_only' => false, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'settings.menu_title.company_information', + 'group' => '', + 'name' => 'Company information', + 'link' => '/admin/settings/company-info', + 'icon' => 'OfficeBuildingIcon', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'settings.menu_title.preferences', + 'group' => '', + 'name' => 'Preferences', + 'link' => '/admin/settings/preferences', + 'icon' => 'CogIcon', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'settings.menu_title.customization', + 'group' => '', + 'name' => 'Customization', + 'link' => '/admin/settings/customization', + 'icon' => 'PencilAltIcon', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'settings.roles.title', + 'group' => '', + 'name' => 'Roles', + 'link' => '/admin/settings/roles-settings', + 'icon' => 'UserGroupIcon', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'settings.menu_title.exchange_rate', + 'group' => '', + 'name' => 'Exchange Rate Provider', + 'link' => '/admin/settings/exchange-rate-provider', + 'icon' => 'CashIcon', + 'owner_only' => false, + 'ability' => 'view-exchange-rate-provider', + 'model' => ExchangeRateProvider::class + ], + [ + 'title' => 'settings.menu_title.notifications', + 'group' => '', + 'name' => 'Notifications', + 'link' => '/admin/settings/notifications', + 'icon' => 'BellIcon', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'settings.menu_title.tax_types', + 'group' => '', + 'name' => 'Tax types', + 'link' => '/admin/settings/tax-types', + 'icon' => 'CheckCircleIcon', + 'owner_only' => false, + 'ability' => 'view-tax-type', + 'model' => TaxType::class + ], + [ + 'title' => 'settings.menu_title.payment_modes', + 'group' => '', + 'name' => 'Payment modes', + 'link' => '/admin/settings/payment-mode', + 'icon' => 'CreditCardIcon', + 'owner_only' => false, + 'ability' => 'view-payment', + 'model' => Payment::class + ], + [ + 'title' => 'settings.menu_title.custom_fields', + 'group' => '', + 'name' => 'Custom fields', + 'link' => '/admin/settings/custom-fields', + 'icon' => 'CubeIcon', + 'owner_only' => false, + 'ability' => 'view-custom-field', + 'model' => CustomField::class + ], + [ + 'title' => 'settings.menu_title.notes', + 'group' => '', + 'name' => 'Notes', + 'link' => '/admin/settings/notes', + 'icon' => 'ClipboardCheckIcon', + 'owner_only' => false, + 'ability' => 'view-all-notes', + 'model' => Note::class + ], + [ + 'title' => 'settings.menu_title.expense_category', + 'group' => '', + 'name' => 'Expense Category', + 'link' => '/admin/settings/expense-category', + 'icon' => 'ClipboardListIcon', + 'owner_only' => false, + 'ability' => 'view-expense', + 'model' => Expense::class + ], + [ + 'title' => 'settings.mail.mail_config', + 'group' => '', + 'name' => 'Mail Configuration', + 'link' => '/admin/settings/mail-configuration', + 'icon' => 'MailIcon', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'settings.menu_title.file_disk', + 'group' => '', + 'name' => 'File Disk', + 'link' => '/admin/settings/file-disk', + 'icon' => 'FolderIcon', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'settings.menu_title.backup', + 'group' => '', + 'name' => 'Backup', + 'link' => '/admin/settings/backup', + 'icon' => 'DatabaseIcon', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'settings.menu_title.update_app', + 'group' => '', + 'name' => 'Update App', + 'link' => '/admin/settings/update-app', + 'icon' => 'RefreshIcon', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + ], + + /* + * List of main menu + */ + 'main_menu' => [ + [ + 'title' => 'navigation.dashboard', + 'group' => 1, + 'link' => '/admin/dashboard', + 'icon' => 'HomeIcon', + 'name' => 'Dashboard', + 'owner_only' => false, + 'ability' => 'dashboard', + 'model' => '' + ], + [ + 'title' => 'navigation.customers', + 'group' => 1, + 'link' => '/admin/customers', + 'icon' => 'UserIcon', + 'name' => 'Customers', + 'owner_only' => false, + 'ability' => 'view-customer', + 'model' => Customer::class + ], + [ + 'title' => 'navigation.items', + 'group' => 1, + 'link' => '/admin/items', + 'icon' => 'StarIcon', + 'name' => 'Items', + 'owner_only' => false, + 'ability' => 'view-item', + 'model' => Item::class + ], + [ + 'title' => 'navigation.estimates', + 'group' => 2, + 'link' => '/admin/estimates', + 'icon' => 'DocumentIcon', + 'name' => 'Estimates', + 'owner_only' => false, + 'ability' => 'view-estimate', + 'model' => Estimate::class + ], + [ + 'title' => 'navigation.invoices', + 'group' => 2, + 'link' => '/admin/invoices', + 'icon' => 'DocumentTextIcon', + 'name' => 'Invoices', + 'owner_only' => false, + 'ability' => 'view-invoice', + 'model' => Invoice::class + ], + [ + 'title' => 'navigation.recurring-invoices', + 'group' => 2, + 'link' => '/admin/recurring-invoices', + 'icon' => 'DocumentTextIcon', + 'name' => 'Recurring Invoices', + 'owner_only' => false, + 'ability' => 'view-recurring-invoice', + 'model' => RecurringInvoice::class + ], + [ + 'title' => 'navigation.payments', + 'group' => 2, + 'link' => '/admin/payments', + 'icon' => 'CreditCardIcon', + 'name' => 'Payments', + 'owner_only' => false, + 'ability' => 'view-payment', + 'model' => Payment::class + ], + [ + 'title' => 'navigation.expenses', + 'group' => 2, + 'link' => '/admin/expenses', + 'icon' => 'CalculatorIcon', + 'name' => 'Expenses', + 'owner_only' => false, + 'ability' => 'view-expense', + 'model' => Expense::class + ], + [ + 'title' => 'navigation.users', + 'group' => 3, + 'link' => '/admin/users', + 'icon' => 'UsersIcon', + 'name' => 'Users', + 'owner_only' => true, + 'ability' => '', + 'model' => '' + ], + [ + 'title' => 'navigation.reports', + 'group' => 3, + 'link' => '/admin/reports', + 'icon' => 'ChartBarIcon', + 'name' => 'Reports', + 'owner_only' => false, + 'ability' => 'view-financial-reports', + 'model' => ''], + [ + 'title' => 'navigation.settings', + 'group' => 3, + 'link' => '/admin/settings', + 'icon' => 'CogIcon', + 'name' => 'Settings', + 'owner_only' => false, + 'ability' => '', + 'model' => '' + ], + ], + + /* + * List of recurring invoice status + */ + 'recurring_invoice_status' => [ + 'create_status' => [ + ['key' => 'settings.preferences.active', 'value' => 'ACTIVE'], + ['key' => 'settings.preferences.on_hold', 'value' => 'ON_HOLD'] + ], + 'update_status' => [ + ['key' => 'settings.preferences.active', 'value' => 'ACTIVE'], + ['key' => 'settings.preferences.on_hold', 'value' => 'ON_HOLD'], + ['key' => 'settings.preferences.completed', 'value' => 'COMPLETED'], + ] + ], + + /* + * List of exchange rate provider (currency converter server's) + */ + 'currency_converter_servers' => [ + ['key' => 'settings.preferences.premium', 'value' => 'PREMIUM'], + ['key' => 'settings.preferences.prepaid', 'value' => 'PREPAID'], + ['key' => 'settings.preferences.free', 'value' => 'FREE'], + ['key' => 'settings.preferences.dedicated', 'value' => 'DEDICATED'], + ], + + /* + * List of exchange rate drivers + */ + 'exchange_rate_drivers' => [ + ['key' => 'settings.exchange_rate.currency_converter', 'value' => 'currency_converter'], + ['key' => 'settings.exchange_rate.currency_freak', 'value' => 'currency_freak'], + ['key' => 'settings.exchange_rate.currency_layer', 'value' => 'currency_layer'], + ['key' => 'settings.exchange_rate.open_exchange_rate', 'value' => 'open_exchange_rate'], + ], + + /* + * List of Custom field supported models + */ + 'custom_field_models' => [ + 'Customer', + 'Estimate', + 'Invoice', + 'Payment', + 'Expense', + ] ]; diff --git a/config/hashids.php b/config/hashids.php index 9264ce9de..68ef3cc5e 100644 --- a/config/hashids.php +++ b/config/hashids.php @@ -9,6 +9,7 @@ * @see https://github.com/vinkla/laravel-hashids */ +use Crater\Models\Company; use Crater\Models\Estimate; use Crater\Models\Invoice; use Crater\Models\Payment; @@ -55,6 +56,11 @@ 'length' => '20', 'alphabet' => 'asqtW3eDRIxB65GYl7UVLS1dybn9XrKTZ4zO', ], + Company::class => [ + 'salt' => Company::class.config('app.key'), + 'length' => '20', + 'alphabet' => 's0DxOFtEYEnuKPmP08Ch6A1iHlLmBTBVWms5', + ], ], ]; diff --git a/config/permission.php b/config/permission.php deleted file mode 100644 index 4750e5f8e..000000000 --- a/config/permission.php +++ /dev/null @@ -1,88 +0,0 @@ - [ - - /* - * When using the "HasRoles" trait from this package, we need to know which - * Eloquent model should be used to retrieve your permissions. Of course, it - * is often just the "Permission" model but you may use whatever you like. - * - * The model you want to use as a Permission model needs to implement the - * `Spatie\Permission\Contracts\Permission` contract. - */ - - 'permission' => Spatie\Permission\Models\Permission::class, - - /* - * When using the "HasRoles" trait from this package, we need to know which - * Eloquent model should be used to retrieve your roles. Of course, it - * is often just the "Role" model but you may use whatever you like. - * - * The model you want to use as a Role model needs to implement the - * `Spatie\Permission\Contracts\Role` contract. - */ - - 'role' => Spatie\Permission\Models\Role::class, - - ], - - 'table_names' => [ - - /* - * When using the "HasRoles" trait from this package, we need to know which - * table should be used to retrieve your roles. We have chosen a basic - * default value but you may easily change it to any table you like. - */ - - 'roles' => 'roles', - - /* - * When using the "HasRoles" trait from this package, we need to know which - * table should be used to retrieve your permissions. We have chosen a basic - * default value but you may easily change it to any table you like. - */ - - 'permissions' => 'permissions', - - /* - * When using the "HasRoles" trait from this package, we need to know which - * table should be used to retrieve your models permissions. We have chosen a - * basic default value but you may easily change it to any table you like. - */ - - 'model_has_permissions' => 'model_has_permissions', - - /* - * When using the "HasRoles" trait from this package, we need to know which - * table should be used to retrieve your models roles. We have chosen a - * basic default value but you may easily change it to any table you like. - */ - - 'model_has_roles' => 'model_has_roles', - - /* - * When using the "HasRoles" trait from this package, we need to know which - * table should be used to retrieve your roles permissions. We have chosen a - * basic default value but you may easily change it to any table you like. - */ - - 'role_has_permissions' => 'role_has_permissions', - ], - - /* - * By default all permissions will be cached for 24 hours unless a permission or - * role is updated. Then the cache will be flushed immediately. - */ - - 'cache_expiration_time' => 60 * 24, - - /* - * When set to true, the required permission/role names are added to the exception - * message. This could be considered an information leak in some contexts, so - * the default setting is false here for optimum safety. - */ - - 'display_permission_in_exception' => false, -]; diff --git a/config/vite.php b/config/vite.php new file mode 100644 index 000000000..18e90ba66 --- /dev/null +++ b/config/vite.php @@ -0,0 +1,67 @@ + [ + 'resources/scripts/main.js', + ], + 'ignore_patterns' => ["/\.d\.ts$/"], + + /* + |-------------------------------------------------------------------------- + | Aliases + |-------------------------------------------------------------------------- + | These aliases will be added to the Vite configuration and used + | to generate a proper tsconfig.json file. + */ + 'aliases' => [ + '@' => 'resources', + ], + + /* + |-------------------------------------------------------------------------- + | Static assets path + |-------------------------------------------------------------------------- + | This option defines the directory that Vite considers as the + | public directory. Its content will be copied to the build directory + | at build-time. + | https://vitejs.dev/config/#publicdir + */ + 'public_directory' => resource_path('static'), + + /* + |-------------------------------------------------------------------------- + | Ping timeout + |-------------------------------------------------------------------------- + | The maximum duration, in seconds, that the ping to the development + | server should take while trying to determine whether to use the + | manifest or the server in a local environment. + */ + 'ping_timeout' => .1, + + /* + |-------------------------------------------------------------------------- + | Build path + |-------------------------------------------------------------------------- + | The directory, relative to /public, in which Vite will build + | the production files. This should match "build.outDir" in the Vite + | configuration file. + */ + 'build_path' => 'build', + + /* + |-------------------------------------------------------------------------- + | Development URL + |-------------------------------------------------------------------------- + | The URL at which the Vite development server runs. + | This is used to generate the script tags when developing. + */ + 'dev_url' => 'http://localhost:3000', +]; diff --git a/crater.code-workspace b/crater.code-workspace new file mode 100644 index 000000000..c3afed3fd --- /dev/null +++ b/crater.code-workspace @@ -0,0 +1,44 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "search.exclude": { + "**/public": true + }, + "editor.formatOnSave": true, + "vetur.validation.template": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + }, + "editor.formatOnPaste": true, + "editor.formatOnType": true, + "editor.codeActionsOnSaveTimeout": 2000, + "prettier.semi": false, + "prettier.singleQuote": true, + "files.associations": {}, + "eslint.codeAction.disableRuleComment": {}, + "eslint.codeAction.showDocumentation": { + "enable": true + }, + "eslint.validate": [ + "javascript", + "javascriptreact", + "vue" + ], + "[php]": { + "editor.defaultFormatter": "junstyle.php-cs-fixer" + }, + "debug.allowBreakpointsEverywhere": true, + "files.autoGuessEncoding": true, + "files.exclude": { + "**/.vscode": true, + "compile_commands.json": true, + "*.hrccproj": true, + "*.sln": true, + "*.suo": true + }, + } +} \ No newline at end of file diff --git a/database/factories/AddressFactory.php b/database/factories/AddressFactory.php index edc68fa82..992674c78 100644 --- a/database/factories/AddressFactory.php +++ b/database/factories/AddressFactory.php @@ -3,6 +3,7 @@ namespace Database\Factories; use Crater\Models\Address; +use Crater\Models\Customer; use Crater\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; @@ -29,11 +30,13 @@ public function definition() 'city' => $this->faker->city, 'state' => $this->faker->state, 'country_id' => 231, + 'company_id' => User::find(1)->companies()->first()->id, 'zip' => $this->faker->postcode, 'phone' => $this->faker->phoneNumber, 'fax' => $this->faker->phoneNumber, 'type' => $this->faker->randomElement([Address::BILLING_TYPE, Address::SHIPPING_TYPE]), 'user_id' => User::factory(), + 'customer_id' => Customer::factory() ]; } } diff --git a/database/factories/CompanyFactory.php b/database/factories/CompanyFactory.php index 70d9abf57..5c37b391e 100644 --- a/database/factories/CompanyFactory.php +++ b/database/factories/CompanyFactory.php @@ -3,6 +3,7 @@ namespace Database\Factories; use Crater\Models\Company; +use Crater\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; class CompanyFactory extends Factory @@ -22,8 +23,9 @@ class CompanyFactory extends Factory public function definition() { return [ - 'unique_hash' => str_random(60), - 'name' => $this->faker->name, + 'unique_hash' => str_random(20), + 'name' => $this->faker->name(), + 'owner_id' => User::where('role', 'super admin')->first()->id ]; } } diff --git a/database/factories/CompanySettingFactory.php b/database/factories/CompanySettingFactory.php index 86fff3665..bec7a80e0 100644 --- a/database/factories/CompanySettingFactory.php +++ b/database/factories/CompanySettingFactory.php @@ -25,7 +25,7 @@ public function definition() return [ 'option' => $this->faker->word, 'value' => $this->faker->word, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, ]; } } diff --git a/database/factories/CustomFieldFactory.php b/database/factories/CustomFieldFactory.php index ff046b9d9..8eb906ce5 100644 --- a/database/factories/CustomFieldFactory.php +++ b/database/factories/CustomFieldFactory.php @@ -32,7 +32,7 @@ public function definition() return clean_slug($item['model_type'], $item['label']); }, 'type' => $this->faker->randomElement(['Text', 'Textarea', 'Phone', 'URL', 'Number','Dropdown' , 'Switch', 'Date', 'DateTime', 'Time']), - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, ]; } } diff --git a/database/factories/CustomFieldValueFactory.php b/database/factories/CustomFieldValueFactory.php index 60847178c..7891970bc 100644 --- a/database/factories/CustomFieldValueFactory.php +++ b/database/factories/CustomFieldValueFactory.php @@ -28,7 +28,7 @@ public function definition() 'custom_field_valuable_id' => 1, 'type' => $this->faker->name, 'custom_field_id' => CustomField::factory(), - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, ]; } } diff --git a/database/factories/CustomerFactory.php b/database/factories/CustomerFactory.php new file mode 100644 index 000000000..f8f3d400d --- /dev/null +++ b/database/factories/CustomerFactory.php @@ -0,0 +1,41 @@ + $this->faker->name, + 'company_name' => $this->faker->company, + 'contact_name' => $this->faker->name, + 'prefix' => $this->faker->randomDigitNotNull, + 'website' => $this->faker->url, + 'enable_portal' => true, + 'email' => $this->faker->unique()->safeEmail, + 'phone' => $this->faker->phoneNumber, + 'company_id' => User::find(1)->companies()->first()->id, + 'password' => Hash::make('secret'), + 'currency_id' => Currency::find(1)->id, + ]; + } +} diff --git a/database/factories/EstimateFactory.php b/database/factories/EstimateFactory.php index c65e1b0c2..e7e711162 100644 --- a/database/factories/EstimateFactory.php +++ b/database/factories/EstimateFactory.php @@ -2,8 +2,11 @@ namespace Database\Factories; +use Crater\Models\Currency; +use Crater\Models\Customer; use Crater\Models\Estimate; use Crater\Models\User; +use Crater\Services\SerialNumberFormatter; use Illuminate\Database\Eloquent\Factories\Factory; class EstimateFactory extends Factory @@ -67,13 +70,19 @@ public function rejected() */ public function definition() { + $sequenceNumber = (new SerialNumberFormatter()) + ->setModel(new Estimate()) + ->setCompany(User::find(1)->companies()->first()->id) + ->setNextNumbers(); + return [ 'estimate_date' => $this->faker->date('Y-m-d', 'now'), 'expiry_date' => $this->faker->date('Y-m-d', 'now'), - 'estimate_number' => 'EST-'.Estimate::getNextEstimateNumber('EST'), - 'reference_number' => Estimate::getNextEstimateNumber('EST'), - 'company_id' => User::where('role', 'super admin')->first()->company_id, - 'user_id' => User::factory()->create(['role' => 'customer'])->id, + 'estimate_number' => $sequenceNumber->getNextNumber(), + 'sequence_number' => $sequenceNumber->nextSequenceNumber, + 'customer_sequence_number' => $sequenceNumber->nextCustomerSequenceNumber, + 'reference_number' => $sequenceNumber->getNextNumber(), + 'company_id' => User::find(1)->companies()->first()->id, 'status' => Estimate::STATUS_DRAFT, 'template_name' => 'estimate1', 'sub_total' => $this->faker->randomDigitNotNull, @@ -90,6 +99,13 @@ public function definition() 'tax' => $this->faker->randomDigitNotNull, 'notes' => $this->faker->text(80), 'unique_hash' => str_random(60), + 'customer_id' => Customer::factory(), + 'exchange_rate' => $this->faker->randomDigitNotNull, + 'base_discount_val' => $this->faker->randomDigitNotNull, + 'base_sub_total' => $this->faker->randomDigitNotNull, + 'base_total' => $this->faker->randomDigitNotNull, + 'base_tax' => $this->faker->randomDigitNotNull, + 'currency_id' => Currency::find(1)->id, ]; } } diff --git a/database/factories/EstimateItemFactory.php b/database/factories/EstimateItemFactory.php index b07ac3e17..2b78a4977 100644 --- a/database/factories/EstimateItemFactory.php +++ b/database/factories/EstimateItemFactory.php @@ -2,6 +2,7 @@ namespace Database\Factories; +use Crater\Models\Estimate; use Crater\Models\EstimateItem; use Crater\Models\Item; use Crater\Models\User; @@ -34,8 +35,9 @@ public function definition() 'price' => function (array $item) { return Item::find($item['item_id'])->price; }, + 'estimate_id' => Estimate::factory(), 'quantity' => $this->faker->randomDigitNotNull, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, 'tax' => $this->faker->randomDigitNotNull, 'total' => function (array $item) { return ($item['price'] * $item['quantity']); @@ -47,6 +49,11 @@ public function definition() 'discount' => function (array $estimate) { return $estimate['discount_type'] == 'percentage' ? (($estimate['discount_val'] * $estimate['total']) / 100) : $estimate['discount_val']; }, + 'exchange_rate' => $this->faker->randomDigitNotNull, + 'base_discount_val' => $this->faker->randomDigitNotNull, + 'base_price' => $this->faker->randomDigitNotNull, + 'base_total' => $this->faker->randomDigitNotNull, + 'base_tax' => $this->faker->randomDigitNotNull, ]; } } diff --git a/database/factories/ExchangeRateLogFactory.php b/database/factories/ExchangeRateLogFactory.php new file mode 100644 index 000000000..14bf2006e --- /dev/null +++ b/database/factories/ExchangeRateLogFactory.php @@ -0,0 +1,33 @@ + Currency::find(1)->id, + 'base_currency_id' => User::find(1)->companies()->first()->id, + 'currency_id' => Currency::find(4)->id, + 'exchange_rate' => $this->faker->randomDigitNotNull + ]; + } +} diff --git a/database/factories/ExchangeRateProviderFactory.php b/database/factories/ExchangeRateProviderFactory.php new file mode 100644 index 000000000..c71bf5777 --- /dev/null +++ b/database/factories/ExchangeRateProviderFactory.php @@ -0,0 +1,30 @@ + $this->faker->word, + 'key' => str_random(10), + 'active' => $this->faker->randomElement([true, false]), + ]; + } +} diff --git a/database/factories/ExpenseCategoryFactory.php b/database/factories/ExpenseCategoryFactory.php index a319e5fa3..93800fcac 100644 --- a/database/factories/ExpenseCategoryFactory.php +++ b/database/factories/ExpenseCategoryFactory.php @@ -24,7 +24,7 @@ public function definition() { return [ 'name' => $this->faker->word, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, 'description' => $this->faker->text, ]; } diff --git a/database/factories/ExpenseFactory.php b/database/factories/ExpenseFactory.php index 732ae9b06..4ad254238 100644 --- a/database/factories/ExpenseFactory.php +++ b/database/factories/ExpenseFactory.php @@ -2,6 +2,8 @@ namespace Database\Factories; +use Crater\Models\Currency; +use Crater\Models\Customer; use Crater\Models\Expense; use Crater\Models\ExpenseCategory; use Crater\Models\User; @@ -26,10 +28,14 @@ public function definition() return [ 'expense_date' => $this->faker->date('Y-m-d', 'now'), 'expense_category_id' => ExpenseCategory::factory(), - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, 'amount' => $this->faker->randomDigitNotNull, 'notes' => $this->faker->text, 'attachment_receipt' => null, + 'customer_id' => Customer::factory(), + 'exchange_rate' => $this->faker->randomDigitNotNull, + 'base_amount' => $this->faker->randomDigitNotNull, + 'currency_id' => Currency::find(1)->id, ]; } } diff --git a/database/factories/InvoiceFactory.php b/database/factories/InvoiceFactory.php index 0a959e876..2adf71b6c 100644 --- a/database/factories/InvoiceFactory.php +++ b/database/factories/InvoiceFactory.php @@ -2,8 +2,12 @@ namespace Database\Factories; +use Crater\Models\Currency; +use Crater\Models\Customer; use Crater\Models\Invoice; +use Crater\Models\RecurringInvoice; use Crater\Models\User; +use Crater\Services\SerialNumberFormatter; use Illuminate\Database\Eloquent\Factories\Factory; class InvoiceFactory extends Factory @@ -94,18 +98,24 @@ public function paid() */ public function definition() { + $sequenceNumber = (new SerialNumberFormatter()) + ->setModel(new Invoice()) + ->setCompany(User::find(1)->companies()->first()->id) + ->setNextNumbers(); + return [ 'invoice_date' => $this->faker->date('Y-m-d', 'now'), 'due_date' => $this->faker->date('Y-m-d', 'now'), - 'invoice_number' => 'INV-'.Invoice::getNextInvoiceNumber('INV'), - 'reference_number' => Invoice::getNextInvoiceNumber('INV'), - 'user_id' => User::factory()->create(['role' => 'customer'])->id, + 'invoice_number' => $sequenceNumber->getNextNumber(), + 'sequence_number' => $sequenceNumber->nextSequenceNumber, + 'customer_sequence_number' => $sequenceNumber->nextCustomerSequenceNumber, + 'reference_number' => $sequenceNumber->getNextNumber(), 'template_name' => 'invoice1', 'status' => Invoice::STATUS_DRAFT, 'tax_per_item' => 'NO', 'discount_per_item' => 'NO', 'paid_status' => Invoice::STATUS_UNPAID, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, 'sub_total' => $this->faker->randomDigitNotNull, 'total' => $this->faker->randomDigitNotNull, 'discount_type' => $this->faker->randomElement(['percentage', 'fixed']), @@ -121,6 +131,15 @@ public function definition() }, 'notes' => $this->faker->text(80), 'unique_hash' => str_random(60), + 'customer_id' => Customer::factory(), + 'recurring_invoice_id' => RecurringInvoice::factory(), + 'exchange_rate' => $this->faker->randomDigitNotNull, + 'base_discount_val' => $this->faker->randomDigitNotNull, + 'base_sub_total' => $this->faker->randomDigitNotNull, + 'base_total' => $this->faker->randomDigitNotNull, + 'base_tax' => $this->faker->randomDigitNotNull, + 'base_due_amount' => $this->faker->randomDigitNotNull, + 'currency_id' => Currency::find(1)->id, ]; } } diff --git a/database/factories/InvoiceItemFactory.php b/database/factories/InvoiceItemFactory.php index c64e82da6..7d3ce52f0 100644 --- a/database/factories/InvoiceItemFactory.php +++ b/database/factories/InvoiceItemFactory.php @@ -4,6 +4,7 @@ use Crater\Models\InvoiceItem; use Crater\Models\Item; +use Crater\Models\RecurringInvoice; use Crater\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; @@ -34,7 +35,7 @@ public function definition() 'price' => function (array $item) { return Item::find($item['item_id'])->price; }, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, 'quantity' => $this->faker->randomDigitNotNull, 'total' => function (array $item) { return ($item['price'] * $item['quantity']); @@ -47,6 +48,12 @@ public function definition() return $invoice['discount_type'] == 'percentage' ? (($invoice['discount_val'] * $invoice['total']) / 100) : $invoice['discount_val']; }, 'tax' => $this->faker->randomDigitNotNull, + 'recurring_invoice_id' => RecurringInvoice::factory(), + 'exchange_rate' => $this->faker->randomDigitNotNull, + 'base_discount_val' => $this->faker->randomDigitNotNull, + 'base_price' => $this->faker->randomDigitNotNull, + 'base_total' => $this->faker->randomDigitNotNull, + 'base_tax' => $this->faker->randomDigitNotNull, ]; } } diff --git a/database/factories/ItemFactory.php b/database/factories/ItemFactory.php index d57c5e6c4..bc476e941 100644 --- a/database/factories/ItemFactory.php +++ b/database/factories/ItemFactory.php @@ -2,6 +2,7 @@ namespace Database\Factories; +use Crater\Models\Currency; use Crater\Models\Item; use Crater\Models\Unit; use Crater\Models\User; @@ -26,9 +27,12 @@ public function definition() return [ 'name' => $this->faker->name, 'description' => $this->faker->text, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, 'price' => $this->faker->randomDigitNotNull, 'unit_id' => Unit::factory(), + 'creator_id' => User::where('role', 'super admin')->first()->company_id, + 'currency_id' => Currency::find(1)->id, + 'tax_per_item' => $this->faker->randomElement([true, false]) ]; } } diff --git a/database/factories/NoteFactory.php b/database/factories/NoteFactory.php index d69560817..7e436efe8 100644 --- a/database/factories/NoteFactory.php +++ b/database/factories/NoteFactory.php @@ -3,6 +3,7 @@ namespace Database\Factories; use Crater\Models\Note; +use Crater\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; class NoteFactory extends Factory @@ -25,6 +26,7 @@ public function definition() 'type' => $this->faker->randomElement(['Invoice', 'Estimate', 'Payment']), 'name' => $this->faker->word, 'notes' => $this->faker->text, + 'company_id' => User::find(1)->companies()->first()->id, ]; } } diff --git a/database/factories/PaymentFactory.php b/database/factories/PaymentFactory.php index 04351f785..9fb91c657 100644 --- a/database/factories/PaymentFactory.php +++ b/database/factories/PaymentFactory.php @@ -2,8 +2,12 @@ namespace Database\Factories; +use Crater\Models\Currency; +use Crater\Models\Customer; use Crater\Models\Payment; +use Crater\Models\PaymentMethod; use Crater\Models\User; +use Crater\Services\SerialNumberFormatter; use Illuminate\Database\Eloquent\Factories\Factory; class PaymentFactory extends Factory @@ -22,13 +26,24 @@ class PaymentFactory extends Factory */ public function definition() { + $sequenceNumber = (new SerialNumberFormatter()) + ->setModel(new Payment()) + ->setCompany(User::find(1)->companies()->first()->id) + ->setNextNumbers(); + return [ - 'user_id' => User::factory()->create(['role' => 'customer'])->id, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, 'payment_date' => $this->faker->date('Y-m-d', 'now'), 'notes' => $this->faker->text(80), 'amount' => $this->faker->randomDigitNotNull, - 'payment_number' => 'PAY-'.Payment::getNextPaymentNumber('PAY'), + 'sequence_number' => $sequenceNumber->nextSequenceNumber, + 'customer_sequence_number' => $sequenceNumber->nextCustomerSequenceNumber, + 'payment_number' => $sequenceNumber->getNextNumber(), + 'unique_hash' => str_random(60), + 'payment_method_id' => PaymentMethod::find(1)->id, + 'customer_id' => Customer::factory(), + 'base_amount' => $this->faker->randomDigitNotNull, + 'currency_id' => Currency::find(1)->id, ]; } } diff --git a/database/factories/PaymentMethodFactory.php b/database/factories/PaymentMethodFactory.php index 4e4a5711d..c2e35767c 100644 --- a/database/factories/PaymentMethodFactory.php +++ b/database/factories/PaymentMethodFactory.php @@ -24,7 +24,7 @@ public function definition() { return [ 'name' => $this->faker->name, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, ]; } } diff --git a/database/factories/RecurringInvoiceFactory.php b/database/factories/RecurringInvoiceFactory.php new file mode 100644 index 000000000..90756ba84 --- /dev/null +++ b/database/factories/RecurringInvoiceFactory.php @@ -0,0 +1,47 @@ + $this->faker->iso8601(), + 'send_automatically' => false, + 'status' => $this->faker->randomElement(['COMPLETED', 'ON_HOLD', 'ACTIVE']), + 'tax_per_item' => 'NO', + 'discount_per_item' => 'NO', + 'sub_total' => $this->faker->randomDigitNotNull, + 'total' => $this->faker->randomDigitNotNull, + 'tax' => $this->faker->randomDigitNotNull, + 'due_amount' => $this->faker->randomDigitNotNull, + 'discount' => $this->faker->randomDigitNotNull, + 'discount_val' => $this->faker->randomDigitNotNull, + 'customer_id' => Customer::factory(), + 'company_id' => User::find(1)->companies()->first()->id, + 'frequency' => '* * 18 * *', + 'limit_by' => $this->faker->randomElement(['NONE', 'COUNT', 'DATE']), + 'limit_count' => $this->faker->randomDigit, + 'limit_date' => $this->faker->date(), + 'exchange_rate' => $this->faker->randomDigitNotNull + ]; + } +} diff --git a/database/factories/TaxFactory.php b/database/factories/TaxFactory.php index 268e954ad..5aa904443 100644 --- a/database/factories/TaxFactory.php +++ b/database/factories/TaxFactory.php @@ -2,6 +2,7 @@ namespace Database\Factories; +use Crater\Models\Currency; use Crater\Models\Tax; use Crater\Models\TaxType; use Crater\Models\User; @@ -31,8 +32,11 @@ public function definition() 'name' => function (array $item) { return TaxType::find($item['tax_type_id'])->name; }, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, 'amount' => $this->faker->randomDigitNotNull, + 'compound_tax' => $this->faker->randomDigitNotNull, + 'base_amount' => $this->faker->randomDigitNotNull, + 'currency_id' => Currency::where('name', 'US Dollar')->first()->company_id, ]; } } diff --git a/database/factories/TaxTypeFactory.php b/database/factories/TaxTypeFactory.php index e886eb085..2306d0505 100644 --- a/database/factories/TaxTypeFactory.php +++ b/database/factories/TaxTypeFactory.php @@ -24,7 +24,7 @@ public function definition() { return [ 'name' => $this->faker->word, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, 'percent' => $this->faker->numberBetween($min = 0, $max = 100), 'description' => $this->faker->text, 'compound_tax' => 0, diff --git a/database/factories/UnitFactory.php b/database/factories/UnitFactory.php index 130367134..8b244450b 100644 --- a/database/factories/UnitFactory.php +++ b/database/factories/UnitFactory.php @@ -24,7 +24,7 @@ public function definition() { return [ 'name' => $this->faker->name, - 'company_id' => User::where('role', 'super admin')->first()->company_id, + 'company_id' => User::find(1)->companies()->first()->id, ]; } } diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index d02e9db03..2f67269ef 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -31,7 +31,6 @@ public function definition() 'enable_portal' => true, 'email' => $this->faker->unique()->safeEmail, 'phone' => $this->faker->phoneNumber, - 'company_id' => User::find(1)->company_id, 'role' => 'super admin', 'password' => Hash::make('secret'), 'currency_id' => Currency::first()->id, diff --git a/database/migrations/2020_12_02_090527_update_crater_version_400.php b/database/migrations/2020_12_02_090527_update_crater_version_400.php index be4b62d0d..9520b200b 100644 --- a/database/migrations/2020_12_02_090527_update_crater_version_400.php +++ b/database/migrations/2020_12_02_090527_update_crater_version_400.php @@ -33,12 +33,12 @@ public function up() ]); // Update language - $user->setSettings(['language' => CompanySetting::getSetting('language', $user->company_id)]); + $user->setSettings(['language' => CompanySetting::getSetting('language', $user->companies()->first()->id)]); // Update user's addresses if ($user->addresses()->exists()) { foreach ($user->addresses as $address) { - $address->company_id = $user->company_id; + $address->company_id = $user->companies()->first()->id; $address->user_id = null; $address->save(); } @@ -131,6 +131,6 @@ private function updateCompanySettings($user) 'payment_from_customer_address_format' => $paymentFromCustomerAddress, ]; - CompanySetting::setSettings($settings, $user->company_id); + CompanySetting::setSettings($settings, $user->companies()->first()->id); } } diff --git a/database/migrations/2021_06_28_105334_create_bouncer_tables.php b/database/migrations/2021_06_28_105334_create_bouncer_tables.php new file mode 100644 index 000000000..dfc4daf78 --- /dev/null +++ b/database/migrations/2021_06_28_105334_create_bouncer_tables.php @@ -0,0 +1,114 @@ +bigIncrements('id'); + $table->string('name'); + $table->string('title')->nullable(); + $table->bigInteger('entity_id')->unsigned()->nullable(); + $table->string('entity_type')->nullable(); + $table->boolean('only_owned')->default(false); + $table->json('options')->nullable(); + $table->integer('scope')->nullable()->index(); + $table->timestamps(); + }); + + Schema::create(Models::table('roles'), function (Blueprint $table) { + $table->bigIncrements('id'); + $table->string('name'); + $table->string('title')->nullable(); + $table->integer('level')->unsigned()->nullable(); + $table->integer('scope')->nullable()->index(); + $table->timestamps(); + + $table->unique( + ['name', 'scope'], + 'roles_name_unique' + ); + }); + + Schema::create(Models::table('assigned_roles'), function (Blueprint $table) { + $table->bigIncrements('id'); + $table->bigInteger('role_id')->unsigned()->index(); + $table->bigInteger('entity_id')->unsigned(); + $table->string('entity_type'); + $table->bigInteger('restricted_to_id')->unsigned()->nullable(); + $table->string('restricted_to_type')->nullable(); + $table->integer('scope')->nullable()->index(); + + $table->index( + ['entity_id', 'entity_type', 'scope'], + 'assigned_roles_entity_index' + ); + + $table->foreign('role_id') + ->references('id')->on(Models::table('roles')) + ->onUpdate('cascade')->onDelete('cascade'); + }); + + Schema::create(Models::table('permissions'), function (Blueprint $table) { + $table->bigIncrements('id'); + $table->bigInteger('ability_id')->unsigned()->index(); + $table->bigInteger('entity_id')->unsigned()->nullable(); + $table->string('entity_type')->nullable(); + $table->boolean('forbidden')->default(false); + $table->integer('scope')->nullable()->index(); + + $table->index( + ['entity_id', 'entity_type', 'scope'], + 'permissions_entity_index' + ); + + $table->foreign('ability_id') + ->references('id')->on(Models::table('abilities')) + ->onUpdate('cascade')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop(Models::table('permissions')); + Schema::drop(Models::table('assigned_roles')); + Schema::drop(Models::table('roles')); + Schema::drop(Models::table('abilities')); + } +} diff --git a/database/migrations/2021_06_28_111647_create_customers_table.php b/database/migrations/2021_06_28_111647_create_customers_table.php new file mode 100644 index 000000000..1e073c447 --- /dev/null +++ b/database/migrations/2021_06_28_111647_create_customers_table.php @@ -0,0 +1,49 @@ +id(); + $table->string('name'); + $table->string('email')->unique()->nullable(); + $table->string('phone')->nullable(); + $table->string('password')->nullable(); + $table->rememberToken(); + $table->string('facebook_id')->nullable(); + $table->string('google_id')->nullable(); + $table->string('github_id')->nullable(); + $table->string('contact_name')->nullable(); + $table->string('company_name')->nullable(); + $table->string('website')->nullable(); + $table->boolean('enable_portal')->nullable(); + $table->integer('currency_id')->unsigned()->nullable(); + $table->foreign('currency_id')->references('id')->on('currencies'); + $table->integer('company_id')->unsigned()->nullable(); + $table->foreign('company_id')->references('id')->on('companies'); + $table->unsignedInteger('creator_id')->nullable(); + $table->foreign('creator_id')->references('id')->on('users'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('customers'); + } +} diff --git a/database/migrations/2021_06_28_120010_add_customer_id_to_estimates_table.php b/database/migrations/2021_06_28_120010_add_customer_id_to_estimates_table.php new file mode 100644 index 000000000..c2762011b --- /dev/null +++ b/database/migrations/2021_06_28_120010_add_customer_id_to_estimates_table.php @@ -0,0 +1,36 @@ +unsignedBigInteger('customer_id')->nullable(); + $table->foreign('customer_id')->references('id')->on('customers'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('estimates', function (Blueprint $table) { + if (config('database.default') !== 'sqlite') { + $table->dropForeign(['customer_id']); + } + $table->dropColumn('customer_id'); + }); + } +} diff --git a/database/migrations/2021_06_28_120133_add_customer_id_to_expenses_table.php b/database/migrations/2021_06_28_120133_add_customer_id_to_expenses_table.php new file mode 100644 index 000000000..ebe905cab --- /dev/null +++ b/database/migrations/2021_06_28_120133_add_customer_id_to_expenses_table.php @@ -0,0 +1,32 @@ +unsignedBigInteger('customer_id')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('expenses', function (Blueprint $table) { + $table->dropColumn('customer_id'); + }); + } +} diff --git a/database/migrations/2021_06_28_120208_add_customer_id_to_invoices_table.php b/database/migrations/2021_06_28_120208_add_customer_id_to_invoices_table.php new file mode 100644 index 000000000..5df3fb3b4 --- /dev/null +++ b/database/migrations/2021_06_28_120208_add_customer_id_to_invoices_table.php @@ -0,0 +1,36 @@ +unsignedBigInteger('customer_id')->nullable(); + $table->foreign('customer_id')->references('id')->on('customers'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('invoices', function (Blueprint $table) { + if (config('database.default') !== 'sqlite') { + $table->dropForeign(['customer_id']); + } + $table->dropColumn('customer_id'); + }); + } +} diff --git a/database/migrations/2021_06_28_120231_add_customer_id_to_payments_table.php b/database/migrations/2021_06_28_120231_add_customer_id_to_payments_table.php new file mode 100644 index 000000000..96675b9d6 --- /dev/null +++ b/database/migrations/2021_06_28_120231_add_customer_id_to_payments_table.php @@ -0,0 +1,36 @@ +unsignedBigInteger('customer_id')->nullable(); + $table->foreign('customer_id')->references('id')->on('customers'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('payments', function (Blueprint $table) { + if (config('database.default') !== 'sqlite') { + $table->dropForeign(['customer_id']); + } + $table->dropColumn('customer_id'); + }); + } +} diff --git a/database/migrations/2021_06_29_052745_add_customer_id_to_addresses_table.php b/database/migrations/2021_06_29_052745_add_customer_id_to_addresses_table.php new file mode 100644 index 000000000..ca435c4cc --- /dev/null +++ b/database/migrations/2021_06_29_052745_add_customer_id_to_addresses_table.php @@ -0,0 +1,36 @@ +unsignedBigInteger('customer_id')->nullable(); + $table->foreign('customer_id')->references('id')->on('customers'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('addresses', function (Blueprint $table) { + if (config('database.default') !== 'sqlite') { + $table->dropForeign(['customer_id']); + } + $table->dropColumn('customer_id'); + }); + } +} diff --git a/database/migrations/2021_06_30_062411_update_customer_id_in_all_tables.php b/database/migrations/2021_06_30_062411_update_customer_id_in_all_tables.php new file mode 100644 index 000000000..06016fafe --- /dev/null +++ b/database/migrations/2021_06_30_062411_update_customer_id_in_all_tables.php @@ -0,0 +1,130 @@ +get(); + + $users->makeVisible('password', 'remember_token'); + + if ($users) { + foreach ($users as $user) { + $newCustomer = Customer::create($user->toArray()); + + $customFields = CustomField::where('model_type', 'User')->get(); + + if ($customFields) { + $user->fields->map(function ($customFieldValue) use ($newCustomer) { + $customFieldValue->custom_field_valuable_type = "Crater\Models\Customer"; + $customFieldValue->custom_field_valuable_id = $newCustomer->id; + $customFieldValue->save(); + + $customField = $customFieldValue->customField; + $customField->model_type = "Customer"; + $customField->slug = Str::upper('CUSTOM_'.$customField->model_type.'_'.Str::slug($customField->label, '_')); + $customField->save(); + }); + } + + $user->addresses->map(function ($address) use ($newCustomer) { + if ($address) { + $address->customer_id = $newCustomer->id; + $address->user_id = null; + $address->save(); + } + }); + + $user->expenses->map(function ($expense) use ($newCustomer) { + if ($expense) { + $expense->customer_id = $newCustomer->id; + $expense->user_id = null; + $expense->save(); + } + }); + + $user->estimates->map(function ($estimate) use ($newCustomer) { + if ($estimate) { + $estimate->customer_id = $newCustomer->id; + $estimate->user_id = null; + $estimate->save(); + } + }); + + $user->invoices->map(function ($invoice) use ($newCustomer) { + if ($invoice) { + $invoice->customer_id = $newCustomer->id; + $invoice->user_id = null; + $invoice->save(); + } + }); + + $user->payments->map(function ($payment) use ($newCustomer) { + if ($payment) { + $payment->customer_id = $newCustomer->id; + $payment->save(); + } + }); + } + } + + Schema::table('estimates', function (Blueprint $table) { + if (config('database.default') !== 'sqlite') { + $table->dropForeign(['user_id']); + } + $table->dropColumn('user_id'); + }); + + Schema::table('expenses', function (Blueprint $table) { + if (config('database.default') !== 'sqlite') { + $table->dropForeign(['user_id']); + } + $table->dropColumn('user_id'); + }); + + Schema::table('invoices', function (Blueprint $table) { + if (config('database.default') !== 'sqlite') { + $table->dropForeign(['user_id']); + } + $table->dropColumn('user_id'); + }); + + Schema::table('payments', function (Blueprint $table) { + if (config('database.default') !== 'sqlite') { + $table->dropForeign(['user_id']); + } + $table->dropColumn('user_id'); + }); + + Schema::table('items', function (Blueprint $table) { + $table->dropColumn('unit'); + }); + + $users = User::where('role', 'customer') + ->delete(); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2021_07_01_060700_create_user_company_table.php b/database/migrations/2021_07_01_060700_create_user_company_table.php new file mode 100644 index 000000000..2aa6475c9 --- /dev/null +++ b/database/migrations/2021_07_01_060700_create_user_company_table.php @@ -0,0 +1,35 @@ +id(); + $table->unsignedInteger('user_id')->nullable(); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->unsignedInteger('company_id')->nullable(); + $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('company_user'); + } +} diff --git a/database/migrations/2021_07_05_100256_change_relationship_of_company.php b/database/migrations/2021_07_05_100256_change_relationship_of_company.php new file mode 100644 index 000000000..e98ca2709 --- /dev/null +++ b/database/migrations/2021_07_05_100256_change_relationship_of_company.php @@ -0,0 +1,44 @@ +companies()->attach($user->company_id); + $user->company_id = null; + $user->save(); + } + } + + Schema::table('users', function (Blueprint $table) { + if (config('database.default') !== 'sqlite') { + $table->dropForeign(['company_id']); + } + $table->dropColumn('company_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2021_07_06_070204_add_owner_id_to_companies_table.php b/database/migrations/2021_07_06_070204_add_owner_id_to_companies_table.php new file mode 100644 index 000000000..a4d76427b --- /dev/null +++ b/database/migrations/2021_07_06_070204_add_owner_id_to_companies_table.php @@ -0,0 +1,58 @@ +string('slug')->nullable(); + $table->unsignedInteger('owner_id')->nullable(); + $table->foreign('owner_id')->references('id')->on('users'); + }); + + $user = User::where('role', 'super admin')->first(); + + $companies = Company::all(); + + if ($companies) { + foreach ($companies as $company) { + $company->owner_id = $user->id; + $company->slug = Str::slug($company->name); + $company->save(); + + $company->setupRoles(); + $user->assign('super admin'); + + $users = User::where('role', 'admin')->get(); + $users->map(function ($user) { + $user->assign('super admin'); + }); + } + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('companies', function (Blueprint $table) { + $table->dropColumn('slug'); + $table->dropForeign(['owner_id']); + }); + } +} diff --git a/database/migrations/2021_07_08_110940_add_company_to_notes_table.php b/database/migrations/2021_07_08_110940_add_company_to_notes_table.php new file mode 100644 index 000000000..939d883bf --- /dev/null +++ b/database/migrations/2021_07_08_110940_add_company_to_notes_table.php @@ -0,0 +1,45 @@ +unsignedInteger('company_id')->nullable(); + $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade'); + }); + + $user = User::where('role', 'super admin')->first(); + + if ($user) { + $notes = Note::where('company_id', null)->get(); + $notes->map(function ($note) use ($user) { + $note->company_id = $user->companies()->first()->id; + $note->save(); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('notes', function (Blueprint $table) { + $table->dropForeign(['company_id']); + }); + } +} diff --git a/database/migrations/2021_07_09_063502_create_recurring_invoices_table.php b/database/migrations/2021_07_09_063502_create_recurring_invoices_table.php new file mode 100644 index 000000000..76baab0a8 --- /dev/null +++ b/database/migrations/2021_07_09_063502_create_recurring_invoices_table.php @@ -0,0 +1,59 @@ +id(); + $table->dateTime('starts_at', $precision = 0); + $table->boolean('send_automatically')->default(false); + $table->unsignedBigInteger('customer_id')->nullable(); + $table->foreign('customer_id')->references('id')->on('customers'); + $table->integer('company_id')->unsigned()->nullable(); + $table->foreign('company_id')->references('id')->on('companies'); + $table->enum('status', ['COMPLETED', 'ON_HOLD', 'ACTIVE'])->default('ACTIVE'); + $table->dateTime('next_invoice_at', $precision = 0)->nullable(); + $table->unsignedInteger('creator_id')->nullable(); + $table->foreign('creator_id')->references('id')->on('users'); + $table->string('frequency'); + $table->enum('limit_by', ['NONE', 'COUNT', 'DATE'])->default('NONE'); + $table->integer('limit_count')->nullable(); + $table->date('limit_date')->nullable(); + $table->unsignedInteger('currency_id')->nullable(); + $table->foreign('currency_id')->references('id')->on('currencies'); + $table->decimal('exchange_rate', 19, 6)->nullable(); + $table->string('tax_per_item'); + $table->string('discount_per_item'); + $table->text('notes')->nullable(); + $table->string('discount_type')->nullable(); + $table->decimal('discount', 15, 2)->nullable(); + $table->unsignedBigInteger('discount_val')->nullable(); + $table->unsignedBigInteger('sub_total'); + $table->unsignedBigInteger('total'); + $table->unsignedBigInteger('tax'); + $table->string('template_name')->nullable(); + $table->unsignedBigInteger('due_amount'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('recurring_invoices'); + } +} diff --git a/database/migrations/2021_07_09_063712_add_recurring_invoice_id_to_invoices_table.php b/database/migrations/2021_07_09_063712_add_recurring_invoice_id_to_invoices_table.php new file mode 100644 index 000000000..bacec8d0d --- /dev/null +++ b/database/migrations/2021_07_09_063712_add_recurring_invoice_id_to_invoices_table.php @@ -0,0 +1,33 @@ +unsignedBigInteger('recurring_invoice_id')->nullable(); + $table->foreign('recurring_invoice_id')->references('id')->on('recurring_invoices'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('invoices', function (Blueprint $table) { + $table->dropColumn('recurring_invoice_id'); + }); + } +} diff --git a/database/migrations/2021_07_09_063755_add_recurring_invoice_id_to_invoice_items_table.php b/database/migrations/2021_07_09_063755_add_recurring_invoice_id_to_invoice_items_table.php new file mode 100644 index 000000000..063c6d347 --- /dev/null +++ b/database/migrations/2021_07_09_063755_add_recurring_invoice_id_to_invoice_items_table.php @@ -0,0 +1,34 @@ +integer('invoice_id')->unsigned()->nullable()->change(); + $table->unsignedBigInteger('recurring_invoice_id')->nullable(); + $table->foreign('recurring_invoice_id')->references('id')->on('recurring_invoices'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('invoice_items', function (Blueprint $table) { + $table->dropColumn('recurring_invoice_id'); + }); + } +} diff --git a/database/migrations/2021_07_15_054753_make_due_date_optional_in_invoices_table.php b/database/migrations/2021_07_15_054753_make_due_date_optional_in_invoices_table.php new file mode 100644 index 000000000..0caf39ef6 --- /dev/null +++ b/database/migrations/2021_07_15_054753_make_due_date_optional_in_invoices_table.php @@ -0,0 +1,32 @@ +date('due_date')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('invoices', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2021_07_15_054929_make_expiry_date_optional_estimates_table.php b/database/migrations/2021_07_15_054929_make_expiry_date_optional_estimates_table.php new file mode 100644 index 000000000..455e3c49e --- /dev/null +++ b/database/migrations/2021_07_15_054929_make_expiry_date_optional_estimates_table.php @@ -0,0 +1,30 @@ +date('expiry_date')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2021_07_16_072458_add_base_columns_into_invoices_table.php b/database/migrations/2021_07_16_072458_add_base_columns_into_invoices_table.php new file mode 100644 index 000000000..7d45570d0 --- /dev/null +++ b/database/migrations/2021_07_16_072458_add_base_columns_into_invoices_table.php @@ -0,0 +1,44 @@ +decimal('exchange_rate', 19, 6)->nullable(); + $table->unsignedBigInteger('base_discount_val')->nullable(); + $table->unsignedBigInteger('base_sub_total')->nullable(); + $table->unsignedBigInteger('base_total')->nullable(); + $table->unsignedBigInteger('base_tax')->nullable(); + $table->unsignedBigInteger('base_due_amount')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('invoices', function (Blueprint $table) { + $table->dropColumn([ + 'base_discount_val', + 'exchange_rate', + 'base_sub_total', + 'base_total', + 'base_tax', + 'base_due_amount' + ]); + }); + } +} diff --git a/database/migrations/2021_07_16_072925_add_base_columns_into_invoice_items_table.php b/database/migrations/2021_07_16_072925_add_base_columns_into_invoice_items_table.php new file mode 100644 index 000000000..dff9811b0 --- /dev/null +++ b/database/migrations/2021_07_16_072925_add_base_columns_into_invoice_items_table.php @@ -0,0 +1,42 @@ +unsignedBigInteger('base_price')->nullable(); + $table->decimal('exchange_rate', 19, 6)->nullable(); + $table->unsignedBigInteger('base_discount_val')->nullable(); + $table->unsignedBigInteger('base_tax')->nullable(); + $table->unsignedBigInteger('base_total')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('invoice_items', function (Blueprint $table) { + $table->dropColumn([ + 'base_price', + 'exchange_rate', + 'base_discount_val', + 'base_tax', + 'base_total' + ]); + }); + } +} diff --git a/database/migrations/2021_07_16_073040_add_base_columns_into_estimates_table.php b/database/migrations/2021_07_16_073040_add_base_columns_into_estimates_table.php new file mode 100644 index 000000000..d08cb8e28 --- /dev/null +++ b/database/migrations/2021_07_16_073040_add_base_columns_into_estimates_table.php @@ -0,0 +1,42 @@ +decimal('exchange_rate', 19, 6)->nullable(); + $table->unsignedBigInteger('base_discount_val')->nullable(); + $table->unsignedBigInteger('base_sub_total')->nullable(); + $table->unsignedBigInteger('base_total')->nullable(); + $table->unsignedBigInteger('base_tax')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('estimates', function (Blueprint $table) { + $table->dropColumn([ + 'exchange_rate', + 'base_discount_val', + 'base_sub_total', + 'base_total', + 'base_tax', + ]); + }); + } +} diff --git a/database/migrations/2021_07_16_073441_add_base_columns_into_estimate_items_table.php b/database/migrations/2021_07_16_073441_add_base_columns_into_estimate_items_table.php new file mode 100644 index 000000000..4be5f60a0 --- /dev/null +++ b/database/migrations/2021_07_16_073441_add_base_columns_into_estimate_items_table.php @@ -0,0 +1,42 @@ +decimal('exchange_rate', 19, 6)->nullable(); + $table->unsignedBigInteger('base_discount_val')->nullable(); + $table->unsignedBigInteger('base_price')->nullable(); + $table->unsignedBigInteger('base_tax')->nullable(); + $table->unsignedBigInteger('base_total')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('estimate_items', function (Blueprint $table) { + $table->dropColumn([ + 'exchange_rate', + 'base_discount_val', + 'base_price', + 'base_tax', + 'base_total' + ]); + }); + } +} diff --git a/database/migrations/2021_07_16_074810_add_base_column_into_payments_table.php b/database/migrations/2021_07_16_074810_add_base_column_into_payments_table.php new file mode 100644 index 000000000..18aa0f2d8 --- /dev/null +++ b/database/migrations/2021_07_16_074810_add_base_column_into_payments_table.php @@ -0,0 +1,33 @@ +decimal('exchange_rate', 19, 6)->nullable(); + $table->unsignedBigInteger('base_amount')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('payments', function (Blueprint $table) { + $table->dropColumn('base_amount'); + }); + } +} diff --git a/database/migrations/2021_07_16_075100_add_base_values_into_taxes_table.php b/database/migrations/2021_07_16_075100_add_base_values_into_taxes_table.php new file mode 100644 index 000000000..15ca89280 --- /dev/null +++ b/database/migrations/2021_07_16_075100_add_base_values_into_taxes_table.php @@ -0,0 +1,36 @@ +decimal('exchange_rate', 19, 6)->nullable(); + $table->unsignedBigInteger('base_amount')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('taxes', function (Blueprint $table) { + $table->dropColumn([ + 'exchange_rate', + 'base_amount', + ]); + }); + } +} diff --git a/database/migrations/2021_07_16_080253_add_currency_id_into_invoices_table.php b/database/migrations/2021_07_16_080253_add_currency_id_into_invoices_table.php new file mode 100644 index 000000000..ad754f0db --- /dev/null +++ b/database/migrations/2021_07_16_080253_add_currency_id_into_invoices_table.php @@ -0,0 +1,33 @@ +unsignedInteger('currency_id')->nullable(); + $table->foreign('currency_id')->references('id')->on('currencies'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('invoices', function (Blueprint $table) { + $table->dropColumn('currency_id'); + }); + } +} diff --git a/database/migrations/2021_07_16_080508_add_currency_id_into_payments_table.php b/database/migrations/2021_07_16_080508_add_currency_id_into_payments_table.php new file mode 100644 index 000000000..ae49674c0 --- /dev/null +++ b/database/migrations/2021_07_16_080508_add_currency_id_into_payments_table.php @@ -0,0 +1,33 @@ +unsignedInteger('currency_id')->nullable(); + $table->foreign('currency_id')->references('id')->on('currencies'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('payments', function (Blueprint $table) { + $table->dropColumn('currency_id'); + }); + } +} diff --git a/database/migrations/2021_07_16_080611_add_currency_id_into_items_table.php b/database/migrations/2021_07_16_080611_add_currency_id_into_items_table.php new file mode 100644 index 000000000..370fcf9d1 --- /dev/null +++ b/database/migrations/2021_07_16_080611_add_currency_id_into_items_table.php @@ -0,0 +1,33 @@ +unsignedInteger('currency_id')->nullable(); + $table->foreign('currency_id')->references('id')->on('currencies'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('items', function (Blueprint $table) { + $table->dropColumn('currency_id'); + }); + } +} diff --git a/database/migrations/2021_07_16_080702_add_currency_id_into_taxes_table.php b/database/migrations/2021_07_16_080702_add_currency_id_into_taxes_table.php new file mode 100644 index 000000000..d1745bb37 --- /dev/null +++ b/database/migrations/2021_07_16_080702_add_currency_id_into_taxes_table.php @@ -0,0 +1,33 @@ +unsignedInteger('currency_id')->nullable(); + $table->foreign('currency_id')->references('id')->on('currencies'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('taxes', function (Blueprint $table) { + $table->dropColumn('currency_id'); + }); + } +} diff --git a/database/migrations/2021_07_16_112429_add_currency_id_into_estimates_table.php b/database/migrations/2021_07_16_112429_add_currency_id_into_estimates_table.php new file mode 100644 index 000000000..724ff379c --- /dev/null +++ b/database/migrations/2021_07_16_112429_add_currency_id_into_estimates_table.php @@ -0,0 +1,33 @@ +unsignedInteger('currency_id')->nullable(); + $table->foreign('currency_id')->references('id')->on('currencies'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('estimates', function (Blueprint $table) { + $table->dropColumn('currency_id'); + }); + } +} diff --git a/database/migrations/2021_08_05_103535_create_exchange_rate_logs_table.php b/database/migrations/2021_08_05_103535_create_exchange_rate_logs_table.php new file mode 100644 index 000000000..11dda3d60 --- /dev/null +++ b/database/migrations/2021_08_05_103535_create_exchange_rate_logs_table.php @@ -0,0 +1,38 @@ +id(); + $table->integer('company_id')->unsigned()->nullable(); + $table->foreign('company_id')->references('id')->on('companies'); + $table->unsignedInteger('base_currency_id')->nullable(); + $table->foreign('base_currency_id')->references('id')->on('currencies'); + $table->unsignedInteger('currency_id')->nullable(); + $table->foreign('currency_id')->references('id')->on('currencies'); + $table->decimal('exchange_rate', 19, 6)->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('exchange_rates'); + } +} diff --git a/database/migrations/2021_08_16_091413_add_tax_per_item_into_items_table.php b/database/migrations/2021_08_16_091413_add_tax_per_item_into_items_table.php new file mode 100644 index 000000000..f8889a20c --- /dev/null +++ b/database/migrations/2021_08_16_091413_add_tax_per_item_into_items_table.php @@ -0,0 +1,44 @@ +boolean('tax_per_item')->default(false); + }); + + $items = Item::with('taxes')->get(); + + if ($items) { + foreach ($items as $item) { + if (! $item->taxes()->get()->isEmpty()) { + $item->tax_per_item = true; + $item->save(); + } + } + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('items', function (Blueprint $table) { + $table->dropColumn('tax_per_item'); + }); + } +} diff --git a/database/migrations/2021_08_19_063244_add_base_columns_to_expense_table.php b/database/migrations/2021_08_19_063244_add_base_columns_to_expense_table.php new file mode 100644 index 000000000..db9f57c6c --- /dev/null +++ b/database/migrations/2021_08_19_063244_add_base_columns_to_expense_table.php @@ -0,0 +1,39 @@ +decimal('exchange_rate', 19, 6)->nullable(); + $table->unsignedBigInteger('base_amount')->nullable(); + $table->unsignedInteger('currency_id'); + $table->foreign('currency_id')->references('id')->on('currencies'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('expenses', function (Blueprint $table) { + $table->dropColumn([ + 'exchange_rate', + 'base_amount', + 'currency_id', + ]); + }); + } +} diff --git a/database/migrations/2021_09_28_081543_create_exchange_rate_providers_table.php b/database/migrations/2021_09_28_081543_create_exchange_rate_providers_table.php new file mode 100644 index 000000000..7a303d029 --- /dev/null +++ b/database/migrations/2021_09_28_081543_create_exchange_rate_providers_table.php @@ -0,0 +1,38 @@ +id(); + $table->string('driver'); + $table->string('key'); + $table->json('currencies')->nullable(); + $table->json('driver_config')->nullable(); + $table->boolean('active')->default(true); + $table->integer('company_id')->unsigned()->nullable(); + $table->foreign('company_id')->references('id')->on('companies'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('exchange_rate_providers'); + } +} diff --git a/database/migrations/2021_09_28_130822_add_sequence_column.php b/database/migrations/2021_09_28_130822_add_sequence_column.php new file mode 100644 index 000000000..992b9bfa8 --- /dev/null +++ b/database/migrations/2021_09_28_130822_add_sequence_column.php @@ -0,0 +1,101 @@ +string('prefix')->nullable()->after('id'); + }); + + Schema::table('invoices', function (Blueprint $table) { + $table->mediumInteger('sequence_number')->unsigned()->nullable()->after('id'); + $table->mediumInteger('customer_sequence_number')->unsigned()->nullable()->after('sequence_number'); + }); + + Schema::table('estimates', function (Blueprint $table) { + $table->mediumInteger('sequence_number')->unsigned()->nullable()->after('id'); + $table->mediumInteger('customer_sequence_number')->unsigned()->nullable()->after('sequence_number'); + }); + + Schema::table('payments', function (Blueprint $table) { + $table->mediumInteger('sequence_number')->unsigned()->nullable()->after('id'); + $table->mediumInteger('customer_sequence_number')->unsigned()->nullable()->after('sequence_number'); + }); + + $user = User::where('role', 'super admin')->first(); + + if ($user && $user->role == 'super admin') { + $customers = Customer::all(); + foreach ($customers as $customer) { + $invoices = $customer->invoices; + if ($invoices) { + $customerSequence = 1; + $invoices->map(function ($invoice) use ($customerSequence) { + $invoiceNumber = explode("-", $invoice->invoice_number); + $invoice->sequence_number = intval(end($invoiceNumber)); + $invoice->customer_sequence_number = $customerSequence; + $invoice->save(); + $customerSequence += 1; + }); + } + + $estimates = $customer->estimates; + if ($estimates) { + $customerSequence = 1; + $estimates->map(function ($estimate) use ($customerSequence) { + $estimateNumber = explode("-", $estimate->estimate_number); + $estimate->sequence_number = intval(end($estimateNumber)); + $estimate->customer_sequence_number = $customerSequence; + $estimate->save(); + $customerSequence += 1; + }); + } + + $payments = $customer->payments; + if ($estimates) { + $customerSequence = 1; + $payments->map(function ($payment) use ($customerSequence) { + $paymentNumber = explode("-", $payment->payment_number); + $payment->sequence_number = intval(end($paymentNumber)); + $payment->customer_sequence_number = $customerSequence; + $payment->save(); + $customerSequence += 1; + }); + } + } + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('invoices', function (Blueprint $table) { + $table->dropColumn('sequence_number'); + $table->dropColumn('customer_sequence_number'); + }); + Schema::table('estimates', function (Blueprint $table) { + $table->dropColumn('sequence_number'); + $table->dropColumn('customer_sequence_number'); + }); + Schema::table('payments', function (Blueprint $table) { + $table->dropColumn('sequence_number'); + $table->dropColumn('customer_sequence_number'); + }); + } +} diff --git a/database/migrations/2021_10_06_100539_add_recurring_invoice_id_to_taxes_table.php b/database/migrations/2021_10_06_100539_add_recurring_invoice_id_to_taxes_table.php new file mode 100644 index 000000000..90da41a7e --- /dev/null +++ b/database/migrations/2021_10_06_100539_add_recurring_invoice_id_to_taxes_table.php @@ -0,0 +1,33 @@ +unsignedBigInteger('recurring_invoice_id')->nullable(); + $table->foreign('recurring_invoice_id')->references('id')->on('recurring_invoices'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('taxes', function (Blueprint $table) { + $table->dropColumn('recurring_invoice_id'); + }); + } +} diff --git a/database/migrations/2021_11_13_051127_add_payment_method_to_expense_table.php b/database/migrations/2021_11_13_051127_add_payment_method_to_expense_table.php new file mode 100644 index 000000000..c1fbabdb1 --- /dev/null +++ b/database/migrations/2021_11_13_051127_add_payment_method_to_expense_table.php @@ -0,0 +1,33 @@ +integer('payment_method_id')->unsigned()->nullable(); + $table->foreign('payment_method_id')->references('id')->on('payment_methods'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('expenses', function (Blueprint $table) { + $table->dropColumn('payment_method_id'); + }); + } +} diff --git a/database/migrations/2021_11_13_114808_calculate_base_values_for_existing_data.php b/database/migrations/2021_11_13_114808_calculate_base_values_for_existing_data.php new file mode 100644 index 000000000..cba5cd56b --- /dev/null +++ b/database/migrations/2021_11_13_114808_calculate_base_values_for_existing_data.php @@ -0,0 +1,144 @@ +first(); + + if ($user) { + $companyId = $user->companies()->first()->id; + + $currency_id = CompanySetting::getSetting('currency', $companyId); + + $items = Item::all(); + + foreach ($items as $item) { + $item->currency_id = $currency_id; + $item->save(); + } + + $customers = Customer::all(); + + foreach ($customers as $customer) { + if ($customer->invoices()->exists()) { + $customer->invoices->map(function ($invoice) use ($currency_id, $customer) { + if ($customer->currency_id == $currency_id) { + $invoice->update([ + 'currency_id' => $currency_id, + 'exchange_rate' => 1, + 'base_discount_val' => $invoice->sub_total, + 'base_sub_total' => $invoice->sub_total, + 'base_total' => $invoice->total, + 'base_tax' => $invoice->tax, + 'base_due_amount' => $invoice->due_amount + ]); + } else { + $invoice->update([ + 'currency_id' => $customer->currency_id, + ]); + } + $this->items($invoice); + }); + } + + if ($customer->expenses()->exists()) { + $customer->expenses->map(function ($expense) use ($currency_id) { + $expense->update([ + 'currency_id' => $currency_id, + 'exchange_rate' => 1, + 'base_amount' => $expense->amount, + ]); + }); + } + + if ($customer->estimates()->exists()) { + $customer->estimates->map(function ($estimate) use ($currency_id, $customer) { + if ($customer->currency_id == $currency_id) { + $estimate->update([ + 'currency_id' => $currency_id, + 'exchange_rate' => 1, + 'base_discount_val' => $estimate->sub_total, + 'base_sub_total' => $estimate->sub_total, + 'base_total' => $estimate->total, + 'base_tax' => $estimate->tax + ]); + } else { + $estimate->update([ + 'currency_id' => $customer->currency_id, + ]); + } + $this->items($estimate); + }); + } + + if ($customer->payments()->exists()) { + $customer->payments->map(function ($payment) use ($currency_id, $customer) { + if ($customer->currency_id == $currency_id) { + $payment->update([ + 'currency_id' => $currency_id, + 'base_amount' => $payment->amount, + 'exchange_rate' => 1 + ]); + } else { + $payment->update([ + 'currency_id' => $customer->currency_id, + ]); + } + }); + } + } + } + } + + public function items($model) + { + $model->items->map(function ($item) use ($model) { + $item->update([ + 'exchange_rate' => $model->exchange_rate, + 'base_discount_val' => $item->discount_val * $model->exchange_rate, + 'base_price' => $item->price * $model->exchange_rate, + 'base_tax' => $item->tax * $model->exchange_rate, + 'base_total' => $item->total * $model->exchange_rate + ]); + + $this->taxes($item, $model->currency_id); + }); + + $this->taxes($model, $model->currency_id); + } + + public function taxes($model, $currency_id) + { + if ($model->taxes()->exists()) { + $model->taxes->map(function ($tax) use ($model, $currency_id) { + $tax->update([ + 'currency_id' => $currency_id, + 'exchange_rate' => $model->exchange_rate, + 'base_amount' => $tax->amount * $model->exchange_rate, + ]); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2021_11_23_092111_add_new_company_settings.php b/database/migrations/2021_11_23_092111_add_new_company_settings.php new file mode 100644 index 000000000..3056381b9 --- /dev/null +++ b/database/migrations/2021_11_23_092111_add_new_company_settings.php @@ -0,0 +1,60 @@ +map(function ($company) { + $settingsToRemove = [ + 'invoice_number_length', + 'estimate_number_length', + 'payment_number_length', + 'invoice_prefix', + 'estimate_prefix', + 'payment_prefix', + ]; + + $oldSettings = CompanySetting::getSettings($settingsToRemove, $company->id); + $oldSettings = $oldSettings->toArray(); + + $settings = [ + 'invoice_set_due_date_automatically' => 'YES', + 'invoice_due_date_days' => 7, + 'estimate_set_expiry_date_automatically' => 'YES', + 'estimate_expiry_date_days' => 7, + 'estimate_convert_action' => 'no_action', + 'bulk_exchange_rate_configured' => "NO", + 'invoice_number_format' => "{{SERIES:{$oldSettings['invoice_prefix']}}}{{DELIMITER:-}}{{SEQUENCE:{$oldSettings['invoice_number_length']}}}", + 'estimate_number_format' => "{{SERIES:{$oldSettings['estimate_prefix']}}}{{DELIMITER:-}}{{SEQUENCE:{$oldSettings['estimate_number_length']}}}", + 'payment_number_format' => "{{SERIES:{$oldSettings['payment_prefix']}}}{{DELIMITER:-}}{{SEQUENCE:{$oldSettings['payment_number_length']}}}", + ]; + + CompanySetting::whereIn('option', $settingsToRemove)->delete(); + + CompanySetting::setSettings($settings, $company->id); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2021_11_23_093811_update_crater_version_500.php b/database/migrations/2021_11_23_093811_update_crater_version_500.php new file mode 100644 index 000000000..3c205d6dc --- /dev/null +++ b/database/migrations/2021_11_23_093811_update_crater_version_500.php @@ -0,0 +1,27 @@ + ',', 'decimal_separator' => '.', ], + [ + 'name' => 'Jamaican Dollar', + 'code' => 'JMD', + 'symbol' => '$', + 'precision' => '0', + 'thousand_separator' => ',', + 'decimal_separator' => '.', + ], ]; + foreach ($currencies as $currency) { Currency::create($currency); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 42076913a..96eb3470e 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -13,11 +13,8 @@ class DatabaseSeeder extends Seeder */ public function run() { - $this->call(UsersTableSeeder::class); $this->call(CurrenciesTableSeeder::class); - $this->call(DefaultSettingsSeeder::class); $this->call(CountriesTableSeeder::class); - $this->call(PaymentMethodSeeder::class); - $this->call(UnitSeeder::class); + $this->call(UsersTableSeeder::class); } } diff --git a/database/seeders/DefaultSettingsSeeder.php b/database/seeders/DefaultSettingsSeeder.php deleted file mode 100644 index 83a234782..000000000 --- a/database/seeders/DefaultSettingsSeeder.php +++ /dev/null @@ -1,72 +0,0 @@ -first(); - - $defaultInvoiceEmailBody = 'You have received a new invoice from {COMPANY_NAME}.
Please download using the button below:'; - $defaultEstimateEmailBody = 'You have received a new estimate from {COMPANY_NAME}.
Please download using the button below:'; - $defaultPaymentEmailBody = 'Thank you for the payment.
Please download your payment receipt using the button below:'; - $billingAddressFormat = '

{BILLING_ADDRESS_NAME}

{BILLING_ADDRESS_STREET_1}

{BILLING_ADDRESS_STREET_2}

{BILLING_CITY} {BILLING_STATE}

{BILLING_COUNTRY} {BILLING_ZIP_CODE}

{BILLING_PHONE}

'; - $shippingAddressFormat = '

{SHIPPING_ADDRESS_NAME}

{SHIPPING_ADDRESS_STREET_1}

{SHIPPING_ADDRESS_STREET_2}

{SHIPPING_CITY} {SHIPPING_STATE}

{SHIPPING_COUNTRY} {SHIPPING_ZIP_CODE}

{SHIPPING_PHONE}

'; - $companyAddressFormat = '

{COMPANY_NAME}

{COMPANY_ADDRESS_STREET_1}

{COMPANY_ADDRESS_STREET_2}

{COMPANY_CITY} {COMPANY_STATE}

{COMPANY_COUNTRY} {COMPANY_ZIP_CODE}

{COMPANY_PHONE}

'; - $paymentFromCustomerAddress = '

{BILLING_ADDRESS_NAME}

{BILLING_ADDRESS_STREET_1}

{BILLING_ADDRESS_STREET_2}

{BILLING_CITY} {BILLING_STATE} {BILLING_ZIP_CODE}

{BILLING_COUNTRY}

{BILLING_PHONE}

'; - - $settings = [ - 'invoice_auto_generate' => 'YES', - 'payment_auto_generate' => 'YES', - 'estimate_auto_generate' => 'YES', - 'save_pdf_to_disk' => 'NO', - 'invoice_mail_body' => $defaultInvoiceEmailBody, - 'estimate_mail_body' => $defaultEstimateEmailBody, - 'payment_mail_body' => $defaultPaymentEmailBody, - 'invoice_company_address_format' => $companyAddressFormat, - 'invoice_shipping_address_format' => $shippingAddressFormat, - 'invoice_billing_address_format' => $billingAddressFormat, - 'estimate_company_address_format' => $companyAddressFormat, - 'estimate_shipping_address_format' => $shippingAddressFormat, - 'estimate_billing_address_format' => $billingAddressFormat, - 'payment_company_address_format' => $companyAddressFormat, - 'payment_from_customer_address_format' => $paymentFromCustomerAddress, - 'currency' => 1, - 'time_zone' => 'Asia/Kolkata', - 'language' => 'en', - 'fiscal_year' => '1-12', - 'carbon_date_format' => 'Y/m/d', - 'moment_date_format' => 'YYYY/MM/DD', - 'notification_email' => 'noreply@crater.in', - 'notify_invoice_viewed' => 'NO', - 'notify_estimate_viewed' => 'NO', - 'tax_per_item' => 'NO', - 'discount_per_item' => 'NO', - 'invoice_prefix' => 'INV', - 'invoice_auto_generate' => 'YES', - 'invoice_number_length' => 6, - 'invoice_email_attachment' => 'NO', - 'estimate_prefix' => 'EST', - 'estimate_auto_generate' => 'YES', - 'estimate_number_length' => 6, - 'estimate_email_attachment' => 'NO', - 'payment_prefix' => 'PAY', - 'payment_auto_generate' => 'YES', - 'payment_number_length' => 6, - 'payment_email_attachment' => 'NO', - 'save_pdf_to_disk' => 'NO', - ]; - - CompanySetting::setSettings($settings, $user->company_id); - } -} diff --git a/database/seeders/DemoSeeder.php b/database/seeders/DemoSeeder.php index 0647ff49a..f02091230 100644 --- a/database/seeders/DemoSeeder.php +++ b/database/seeders/DemoSeeder.php @@ -20,7 +20,7 @@ public function run() $user->setSettings(['language' => 'en']); - Address::create(['company_id' => $user->company_id, 'country_id' => 1]); + Address::create(['company_id' => $user->companies()->first()->id, 'country_id' => 1]); Setting::setSetting('profile_complete', 'COMPLETED'); diff --git a/database/seeders/PaymentMethodSeeder.php b/database/seeders/PaymentMethodSeeder.php deleted file mode 100644 index 4add3077f..000000000 --- a/database/seeders/PaymentMethodSeeder.php +++ /dev/null @@ -1,22 +0,0 @@ - 'Cash', 'company_id' => 1]); - PaymentMethod::create(['name' => 'Check', 'company_id' => 1]); - PaymentMethod::create(['name' => 'Credit Card', 'company_id' => 1]); - PaymentMethod::create(['name' => 'Bank Transfer', 'company_id' => 1]); - } -} diff --git a/database/seeders/UnitSeeder.php b/database/seeders/UnitSeeder.php deleted file mode 100644 index e060b7910..000000000 --- a/database/seeders/UnitSeeder.php +++ /dev/null @@ -1,29 +0,0 @@ - 'box', 'company_id' => 1]); - Unit::create(['name' => 'cm', 'company_id' => 1]); - Unit::create(['name' => 'dz', 'company_id' => 1]); - Unit::create(['name' => 'ft', 'company_id' => 1]); - Unit::create(['name' => 'g', 'company_id' => 1]); - Unit::create(['name' => 'in', 'company_id' => 1]); - Unit::create(['name' => 'kg', 'company_id' => 1]); - Unit::create(['name' => 'km', 'company_id' => 1]); - Unit::create(['name' => 'lb', 'company_id' => 1]); - Unit::create(['name' => 'mg', 'company_id' => 1]); - Unit::create(['name' => 'pc', 'company_id' => 1]); - } -} diff --git a/database/seeders/UsersTableSeeder.php b/database/seeders/UsersTableSeeder.php index 1c8a79ff6..63f656be0 100644 --- a/database/seeders/UsersTableSeeder.php +++ b/database/seeders/UsersTableSeeder.php @@ -6,6 +6,8 @@ use Crater\Models\Setting; use Crater\Models\User; use Illuminate\Database\Seeder; +use Silber\Bouncer\BouncerFacade; +use Vinkla\Hashids\Facades\Hashids; class UsersTableSeeder extends Seeder { @@ -25,11 +27,16 @@ public function run() $company = Company::create([ 'name' => 'xyz', - 'unique_hash' => str_random(20), + 'owner_id' => $user->id ]); - $user->company_id = $company->id; - $user->save(); + $company->unique_hash = Hashids::connection(Company::class)->encode($company->id); + $company->save(); + $company->setupDefaultData(); + $user->companies()->attach($company->id); + BouncerFacade::scope()->to($company->id); + + $user->assign('super admin'); Setting::setSetting('profile_complete', 0); } diff --git a/docker-compose.yml b/docker-compose.yml index 4abae3ec3..a3e8cf5ed 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,13 +39,23 @@ services: image: nginx:1.17-alpine restart: unless-stopped ports: - - 80:80 + - 8080:80 volumes: - ./:/var/www - ./docker-compose/nginx:/etc/nginx/conf.d/ networks: - crater + cron: + build: + context: ./ + dockerfile: ./docker-compose/cron.dockerfile + container_name: cron + volumes: + - ./:/var/www + networks: + - crater + volumes: db: diff --git a/docker-compose/cron.dockerfile b/docker-compose/cron.dockerfile new file mode 100644 index 000000000..633db3d24 --- /dev/null +++ b/docker-compose/cron.dockerfile @@ -0,0 +1,7 @@ +FROM php:7.4-fpm-alpine + +RUN docker-php-ext-install pdo pdo_mysql + +COPY docker-compose/crontab /etc/crontabs/root + +CMD ["crond", "-f"] diff --git a/docker-compose/crontab b/docker-compose/crontab new file mode 100644 index 000000000..777a48eb5 --- /dev/null +++ b/docker-compose/crontab @@ -0,0 +1 @@ +* * * * * cd /var/www && php artisan schedule:run >> /dev/stdout 2>&1 diff --git a/docker-compose/nginx/nginx.conf b/docker-compose/nginx/nginx.conf index 7210ee0e4..ba2aa53ba 100644 --- a/docker-compose/nginx/nginx.conf +++ b/docker-compose/nginx/nginx.conf @@ -13,9 +13,10 @@ server { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_read_timeout 300; } location / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; } -} \ No newline at end of file +} diff --git a/docker-compose/php/uploads.ini b/docker-compose/php/uploads.ini index 98c2698fd..293cde9e9 100644 --- a/docker-compose/php/uploads.ini +++ b/docker-compose/php/uploads.ini @@ -1,3 +1,4 @@ file_uploads = On upload_max_filesize = 64M -post_max_size = 64M \ No newline at end of file +post_max_size = 64M +max_execution_time = 300 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..9daae7bad --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8662 @@ +{ + "name": "crater-web", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "@headlessui/vue": "^1.4.0", + "@heroicons/vue": "^1.0.1", + "@popperjs/core": "^2.9.2", + "@tailwindcss/forms": "^0.3.3", + "@tiptap/core": "^2.0.0-beta.85", + "@tiptap/starter-kit": "^2.0.0-beta.81", + "@tiptap/vue-3": "^2.0.0-beta.38", + "@vuelidate/core": "^2.0.0-alpha.24", + "@vuelidate/validators": "^2.0.0-alpha.21", + "@vueuse/core": "^6.0.0", + "axios": "^0.19", + "chart.js": "^2.7.3", + "guid": "0.0.12", + "lodash": "^4.17.13", + "maska": "^1.4.6", + "mini-svg-data-uri": "^1.3.3", + "moment": "^2.29.1", + "pinia": "^2.0.0-beta.5", + "v-money3": "^3.13.5", + "v-tooltip": "^2.0.2", + "vue": "^3.2.0-beta.5", + "vue-flatpickr-component": "^9.0.3", + "vue-i18n": "^9.1.7", + "vue-router": "^4.0.8", + "vue3-colorpicker": "^1.0.5", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^1.1.4", + "@vue/compiler-sfc": "^3.2.0-beta.5", + "autoprefixer": "^10.2.5", + "cross-env": "^5.1", + "eslint": "^7.27.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-vue": "^7.0.0-beta.4", + "laravel-vite": "^0.0.7", + "postcss": "^8.2.13", + "prettier": "^2.3.0", + "sass": "^1.32.12", + "tailwind-scrollbar": "^1.3.1", + "tailwindcss": "^2.2.7", + "vite": "^2.0.1" + } + }, + "node_modules/@aesoper/normal-utils": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@aesoper/normal-utils/-/normal-utils-0.1.5.tgz", + "integrity": "sha512-LFF/6y6h5mfwhnJaWqqxuC8zzDaHCG62kMRkd8xhDtq62TQj9dM17A9DhE87W7DhiARJsHLgcina/9P4eNCN1w==" + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", + "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@headlessui/vue": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.4.0.tgz", + "integrity": "sha512-BBLDciyKiGK03whaSVkUacDY2Cd5AR05JCUPWQLvQ9HtjQc9tv5RyPpcdmoXJa+XWI10e3U1JxL+8FY7kJMcEQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@heroicons/vue": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@heroicons/vue/-/vue-1.0.4.tgz", + "integrity": "sha512-jm7JMoUGr7Asn07oYNmewxkdQALnskTzRo17iGpHG/apLcc+GFdvdN4XvWZ2awStodaqeZ4eYWg7UcI0LvLETQ==", + "peerDependencies": { + "vue": ">= 3" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@intlify/core-base": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.1.7.tgz", + "integrity": "sha512-q1W2j81xbHyfKrNcca/CeJyf0Bcx4u9UDu05l7AaiJbqOseTme2o2I3wp1hDDCtmC7k7HgX0sAygyHNJH9swuQ==", + "dependencies": { + "@intlify/devtools-if": "9.1.7", + "@intlify/message-compiler": "9.1.7", + "@intlify/message-resolver": "9.1.7", + "@intlify/runtime": "9.1.7", + "@intlify/shared": "9.1.7", + "@intlify/vue-devtools": "9.1.7" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/devtools-if": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.1.7.tgz", + "integrity": "sha512-/DcN5FUySSkQhDqx5y1RvxfuCXO3Ot/dUEIOs472qbM7Hyb2qif+eXCnwHBzlI4+wEfQVT6L0PiM1a7Er/ro9g==", + "dependencies": { + "@intlify/shared": "9.1.7" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.1.7.tgz", + "integrity": "sha512-JZNkAhr3O7tnbdbRBcpYfqr/Ai26WTzX0K/lV8Y1KVdOIj/dGiamaffdWUdFiDXUnbJRNbPiOaKxy7Pwip3KxQ==", + "dependencies": { + "@intlify/message-resolver": "9.1.7", + "@intlify/shared": "9.1.7", + "source-map": "0.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/message-resolver": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.1.7.tgz", + "integrity": "sha512-WTK+OaXJYjyquLGhuCyDvU2WHkG+kXzXeHagmVFHn+s118Jf2143zzkLLUrapP5CtZ/csuyjmYg7b3xQRQAmvw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/runtime": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.1.7.tgz", + "integrity": "sha512-QURPSlzhOVnRwS2XMGpCDsDkP42kfVBh94aAORxh/gVGzdgJip2vagrIFij/J69aEqdB476WJkMhVjP8VSHmiA==", + "dependencies": { + "@intlify/message-compiler": "9.1.7", + "@intlify/message-resolver": "9.1.7", + "@intlify/shared": "9.1.7" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/shared": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.1.7.tgz", + "integrity": "sha512-zt0zlUdalumvT9AjQNxPXA36UgOndUyvBMplh8uRZU0fhWHAwhnJTcf0NaG9Qvr8I1n3HPSs96+kLb/YdwTavQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/vue-devtools": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.1.7.tgz", + "integrity": "sha512-DI5Wc0aOiohtBUGUkKAcryCWbbuaO4/PK4Pa/LaNCsFNxbtgR5qkIDmhBv9xVPYGTUhySXxaDDAMvOpBjhPJjw==", + "dependencies": { + "@intlify/message-resolver": "9.1.7", + "@intlify/runtime": "9.1.7", + "@intlify/shared": "9.1.7" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.3.tgz", + "integrity": "sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.3.tgz", + "integrity": "sha512-U8Fi/gq4mSuaLyLtFISwuDYzPB73YzgozjxOIHsK6NXgg/IWD1FLaHbFlWmurAMyy98O+ao74ksdQefsquBV1Q==", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=2.0.0" + } + }, + "node_modules/@tiptap/core": { + "version": "2.0.0-beta.99", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.99.tgz", + "integrity": "sha512-DoSIgeYyWGWTDVHyquVM5SM61T4U8kKWjlmOtSPcee13Z5zXrbCBSxCTgtC3uh7I+OcoE/PNQQFMU9yWZzKnhw==", + "dependencies": { + "@types/prosemirror-commands": "^1.0.4", + "@types/prosemirror-inputrules": "^1.0.4", + "@types/prosemirror-keymap": "^1.0.4", + "@types/prosemirror-model": "^1.13.1", + "@types/prosemirror-schema-list": "^1.0.3", + "@types/prosemirror-state": "^1.2.7", + "@types/prosemirror-transform": "^1.1.4", + "@types/prosemirror-view": "^1.17.2", + "prosemirror-commands": "^1.1.10", + "prosemirror-inputrules": "^1.1.3", + "prosemirror-keymap": "^1.1.3", + "prosemirror-model": "^1.14.3", + "prosemirror-schema-list": "^1.1.5", + "prosemirror-state": "^1.3.4", + "prosemirror-transform": "^1.3.2", + "prosemirror-view": "^1.19.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.15.tgz", + "integrity": "sha512-Cso44KsYsqKqaNveQmx5KVaLy9krq5AzE9WhGVDBSFqWhvuIJkQYrTRBbOTfUDs/st9VuwJrbjTDD65ow50wEw==", + "dependencies": { + "prosemirror-inputrules": "^1.1.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.15.tgz", + "integrity": "sha512-jKyV6iiwhxwa0+7uuKD74jNDVNLNOS1GmU14MgaA95pY5e1fyaRBPPX8Gtt89niz2CLOY711AV17RPZTe/e60w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "2.0.0-beta.39", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.39.tgz", + "integrity": "sha512-hmA+ePR+MnRaTJ5MxoZ3yqOcK54cW2KQllZx16ZwSyM+yU9bXVhfMmyZwqRD7GGQFkrfnPm5QnedXDBYJD19OQ==", + "dependencies": { + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.20.1", + "tippy.js": "^6.3.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.15.tgz", + "integrity": "sha512-5i44JzsZOh8Ci6CuYRQy6W3jCpYgX0+VuJKeHvZ6Aomy4Qqrtc9Jk43PBmCj91lNUUtH6Io9l+kDrLCumEFnEg==", + "dependencies": { + "prosemirror-inputrules": "^1.1.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "2.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.0-beta.16.tgz", + "integrity": "sha512-Kakg/RMiVrxjzIkLVDXtbCzRh/9W8dgSG04IhMZNOI8N9vWn8Z78jdUyxEEDTcL/JyWWcMxn9AsJw2U5ajO3pA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.18.tgz", + "integrity": "sha512-E2gz7ovl9nXLZzheqLyN3hi7A10fCaodDn4DvIl4wiEbKZpF7WFBNeb+FQetWNay9UWNeDO94SCX9+rT9H+yHA==", + "dependencies": { + "prosemirror-inputrules": "^1.1.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.0.0-beta.13.tgz", + "integrity": "sha512-nrufdKziA/wovaY4DjGkc8OGuIZi8CH8CW3+yYfeWbruwFKkyZHlZy9nplFWSEqBHPAeqD+px9r91yGMW3ontA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "2.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.19.tgz", + "integrity": "sha512-rslIcVvD42NNh5sEbkCkG03DWMFBrS5KoK+lDOdIcC1DjmTtpVgcLvvE01btzaB3ljx+UVqI2Zaxa6VOiTeEMw==", + "dependencies": { + "@types/prosemirror-dropcursor": "^1.0.3", + "prosemirror-dropcursor": "^1.3.5" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "2.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.33.tgz", + "integrity": "sha512-8s8DPnHIzXg7E7S/DjuS1AAFZKVYXY0KBKaEd1f2V45YOkKwN9El46Ugk/4Ir3yrrllvnisbP9ol+BAQmI0bMg==", + "dependencies": { + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.20.1", + "tippy.js": "^6.3.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "2.0.0-beta.24", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.24.tgz", + "integrity": "sha512-/6Ru0wNLIb3fo30Ar3z/rcakoUA2EIJL9sBFiuyHWTAIujeEaBzA6oG5L4PpP+daKd31JF0I6LjeWMSU9CBSFw==", + "dependencies": { + "@types/prosemirror-gapcursor": "^1.0.4", + "prosemirror-gapcursor": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "2.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.21.tgz", + "integrity": "sha512-Ukl+wjfLhE0tW7lWRpSPPo2tajjGnEaSc/Irey1JineFf+x/azA9rREzQy0r2AhORTalH7lj/KDmSdG8IT6syA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.15.tgz", + "integrity": "sha512-UoXDwEdCV9KiPh0wj0jj2Jt6VDqkoTaSU3d9bmEBLwg1Gjgbuv39JDst7oxSqbf9rgbl3txbeOy35wVBKe9CqA==", + "dependencies": { + "prosemirror-inputrules": "^1.1.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-history": { + "version": "2.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.0-beta.16.tgz", + "integrity": "sha512-nrNwV8a7zUt1t2I/kPX5Y6N9vZ8mrugimJIQmPGIp/4mmw1SEUzkaPpIsv6+ELmqMHSDktQ0ofb3pXeWDXWZvw==", + "dependencies": { + "@types/prosemirror-history": "^1.0.3", + "prosemirror-history": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "2.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.21.tgz", + "integrity": "sha512-fgvRGuNEGWAitbcoz6VZSR9gcVIHksTy2QpXPnQC+N9Mi7havaxreYdMZn+oePW/5kdZoZNRx+jsf5DjKomvoQ==", + "dependencies": { + "prosemirror-state": "^1.3.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.15.tgz", + "integrity": "sha512-ZCz1vCysLdvOUrwODuyBP0BDaemCLh6ib7qTYoSDKdive9kfn0Vc5Fg3o8xgHrtrUfwKIJz/sWOknjDEGIc9cw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "2.0.0-beta.14", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.14.tgz", + "integrity": "sha512-t6xwEqP+d5443Ul2Jvqz9kXb3ro7bA7yY9HA0vskm3120WxxHW9jxgxZN+82Ot5Tm7nXOAlsN6vuqnt4idnxZQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "2.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.16.tgz", + "integrity": "sha512-3n0h5FBfQqBrN/zqF/Ngoyd1bZxeIRLwWI7ak4KulpvOg5V/yw3sw5CSxr2f13ZI9AgGaTq8yOsTYs9dkCCnsQ==", + "dependencies": { + "prosemirror-inputrules": "^1.1.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "2.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.17.tgz", + "integrity": "sha512-qCQVCf9c2hgaeIdfy22PaoZyW5Vare/1aGkOEAaZma5RjrUbV9hrRKwoW9LsDjnh1EN1fIeKdg02yEhnHWtG8A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "2.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.17.tgz", + "integrity": "sha512-+WRd0RuCK4+jFKNVN+4rHTa5VMqqGDO2uc+TknkqhFqWp/z96OAGlpHJOwPrnW1fLbpjEBBQIr1vVYSw6KgcZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.13.tgz", + "integrity": "sha512-0EtAwuRldCAoFaL/iXgkRepEeOd55rPg5N4FQUN1xTwZT7PDofukP0DG/2jff/Uj17x4uTaJAa9qlFWuNnDvjw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "2.0.0-beta.97", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.97.tgz", + "integrity": "sha512-ySnJPG6px/Pv99TGCrgXOi7Ahh1qkpV171C791lLlFuH+lXMo719bWaeCTEiBDxjamVzh18nEJkIxyu6sucpSg==", + "dependencies": { + "@tiptap/core": "^2.0.0-beta.99", + "@tiptap/extension-blockquote": "^2.0.0-beta.15", + "@tiptap/extension-bold": "^2.0.0-beta.15", + "@tiptap/extension-bullet-list": "^2.0.0-beta.15", + "@tiptap/extension-code": "^2.0.0-beta.16", + "@tiptap/extension-code-block": "^2.0.0-beta.17", + "@tiptap/extension-document": "^2.0.0-beta.13", + "@tiptap/extension-dropcursor": "^2.0.0-beta.18", + "@tiptap/extension-gapcursor": "^2.0.0-beta.19", + "@tiptap/extension-hard-break": "^2.0.0-beta.15", + "@tiptap/extension-heading": "^2.0.0-beta.15", + "@tiptap/extension-history": "^2.0.0-beta.15", + "@tiptap/extension-horizontal-rule": "^2.0.0-beta.19", + "@tiptap/extension-italic": "^2.0.0-beta.15", + "@tiptap/extension-list-item": "^2.0.0-beta.14", + "@tiptap/extension-ordered-list": "^2.0.0-beta.15", + "@tiptap/extension-paragraph": "^2.0.0-beta.17", + "@tiptap/extension-strike": "^2.0.0-beta.17", + "@tiptap/extension-text": "^2.0.0-beta.13" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/vue-3": { + "version": "2.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@tiptap/vue-3/-/vue-3-2.0.0-beta.52.tgz", + "integrity": "sha512-bHfJuhlCYOp+V3njGS4qQUVwyfjjb7KtPhZwl0FfYSNJ6/BTHYltd6L+UiQzVdcaoWFvPyF47fZajx602B5FGA==", + "dependencies": { + "@tiptap/extension-bubble-menu": "^2.0.0-beta.29", + "@tiptap/extension-floating-menu": "^2.0.0-beta.23", + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.19.0", + "vue": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@types/estree": { + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz", + "integrity": "sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==", + "dev": true + }, + "node_modules/@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/prosemirror-commands": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz", + "integrity": "sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-dropcursor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.3.tgz", + "integrity": "sha512-b0/8njnJ4lwyHKcGuCMf3x7r1KjxyugB1R/c2iMCjplsJHSC7UY9+OysqgJR5uUXRekUSGniiLgBtac/lvH6wg==", + "dependencies": { + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-gapcursor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.4.tgz", + "integrity": "sha512-9xKjFIG5947dzerFvkLWp6F53JwrUYoYwh3SgcTFEp8SbSfNNrez/PFYVZKPnoqPoaK5WtTdQTaMwpCV9rXQIg==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-history": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.3.tgz", + "integrity": "sha512-5TloMDRavgLjOAKXp1Li8u0xcsspzbT1Cm9F2pwHOkgvQOz1jWQb2VIXO7RVNsFjLBZdIXlyfSLivro3DuMWXg==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-inputrules": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-inputrules/-/prosemirror-inputrules-1.0.4.tgz", + "integrity": "sha512-lJIMpOjO47SYozQybUkpV6QmfuQt7GZKHtVrvS+mR5UekA8NMC5HRIVMyaIauJLWhKU6oaNjpVaXdw41kh165g==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-keymap": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz", + "integrity": "sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg==", + "dependencies": { + "@types/prosemirror-commands": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-model": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.13.2.tgz", + "integrity": "sha512-a2rDB0aZ+7aIP7uBqQq1wLb4Hg4qqEvpkCqvhsgT/gG8IWC0peCAZfQ24sgTco0qSJLeDgIbtPeU6mgr869/kg==", + "dependencies": { + "@types/orderedmap": "*" + } + }, + "node_modules/@types/prosemirror-schema-list": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-list/-/prosemirror-schema-list-1.0.3.tgz", + "integrity": "sha512-uWybOf+M2Ea7rlbs0yLsS4YJYNGXYtn4N+w8HCw3Vvfl6wBAROzlMt0gV/D/VW/7J/LlAjwMezuGe8xi24HzXA==", + "dependencies": { + "@types/orderedmap": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-state": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.2.7.tgz", + "integrity": "sha512-clJf5uw3/XQnBJtl2RqYXoLMGBySnLYl43xtDvFfQZKkLnnYcM1SDU8dcz7lWjl2Dm+H98RpLOl44pp7DYT+wA==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-transform": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.4.tgz", + "integrity": "sha512-HP1PauvkqSgDquZut8HaLOTUDQ6jja/LAy4OA7tTS1XG7wqRnX3gLUyEj0mD6vFd4y8BPkNddNdOh/BeGHlUjg==", + "dependencies": { + "@types/prosemirror-model": "*" + } + }, + "node_modules/@types/prosemirror-view": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.19.1.tgz", + "integrity": "sha512-fyQ4NVxAdfISWrE2qT8cpZdosXoH/1JuVYMBs9CdaXPbvi/8R2L2tkkcMRM314piKrO8nfYH5OBZKzP2Ax3jtA==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-1.4.0.tgz", + "integrity": "sha512-RkqfJHz9wdLKBp5Yi+kQL8BAljdrvPoccQm2PTZc/UcL4EjD11xsv2PPCduYx2oV1a/bpSKA3sD5sxOHFhz+LA==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.4.tgz", + "integrity": "sha512-c8NuQq7mUXXxA4iqD5VUKpyVeklK53+DMbojYMyZ0VPPrb0BUWrZWFiqSDT+MFDv0f6Hv3QuLiHWb1BWMXBbrw==", + "dependencies": { + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", + "@vue/shared": "3.2.4", + "estree-walker": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.4.tgz", + "integrity": "sha512-uj1nwO4794fw2YsYas5QT+FU/YGrXbS0Qk+1c7Kp1kV7idhZIghWLTjyvYibpGoseFbYLPd+sW2/noJG5H04EQ==", + "dependencies": { + "@vue/compiler-core": "3.2.4", + "@vue/shared": "3.2.4" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.4.tgz", + "integrity": "sha512-GM+ouDdDzhqgkLmBH4bgq4kiZxJQArSppJiZHWHIx9XRaefHLmc1LBNPmN8ivm4SVfi2i7M2t9k8ZnjsScgzPQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.13.9", + "@babel/types": "^7.13.0", + "@types/estree": "^0.0.48", + "@vue/compiler-core": "3.2.4", + "@vue/compiler-dom": "3.2.4", + "@vue/compiler-ssr": "3.2.4", + "@vue/shared": "3.2.4", + "consolidate": "^0.16.0", + "estree-walker": "^2.0.1", + "hash-sum": "^2.0.0", + "lru-cache": "^5.1.1", + "magic-string": "^0.25.7", + "merge-source-map": "^1.1.0", + "postcss": "^8.1.10", + "postcss-modules": "^4.0.0", + "postcss-selector-parser": "^6.0.4", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.4.tgz", + "integrity": "sha512-c8NuQq7mUXXxA4iqD5VUKpyVeklK53+DMbojYMyZ0VPPrb0BUWrZWFiqSDT+MFDv0f6Hv3QuLiHWb1BWMXBbrw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", + "@vue/shared": "3.2.4", + "estree-walker": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-ssr": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.4.tgz", + "integrity": "sha512-bKZuXu9/4XwsFHFWIKQK+5kN7mxIIWmMmT2L4VVek7cvY/vm3p4WTsXYDGZJy0htOTXvM2ifr6sflg012T0hsw==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.2.4", + "@vue/shared": "3.2.4" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.19.tgz", + "integrity": "sha512-oLon0Cn3O7WEYzzmzZavGoqXH+199LT+smdjBT3Uf3UX4HwDNuBFCmvL0TsqV9SQnIgKvBRbQ7lhbpnd4lqM3w==", + "dependencies": { + "@vue/compiler-dom": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/@vue/compiler-ssr/node_modules/@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr/node_modules/@vue/compiler-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.19.tgz", + "integrity": "sha512-WzQoE8rfkFjPtIioc7SSgTsnz9g2oG61DU8KHnzPrRS7fW/lji6H2uCYJfp4Z6kZE8GjnHc1Ljwl3/gxDes0cw==", + "dependencies": { + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/@vue/compiler-ssr/node_modules/@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + }, + "node_modules/@vue/devtools-api": { + "version": "6.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.0.0-beta.18.tgz", + "integrity": "sha512-56vRhO7nXWWFYTx520BQSDlQH5VYpwy62hFDEqi2yHHEBpEqseOP5WYQusq7BEW3DXSY9E9cfPVR5CFtJbKuMg==" + }, + "node_modules/@vue/reactivity": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.4.tgz", + "integrity": "sha512-ljWTR0hr8Tn09hM2tlmWxZzCBPlgGLnq/k8K8X6EcJhtV+C8OzFySnbWqMWataojbrQOocThwsC8awKthSl2uQ==", + "dependencies": { + "@vue/shared": "3.2.4" + } + }, + "node_modules/@vue/ref-transform": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.19.tgz", + "integrity": "sha512-03wwUnoIAeKti5IGGx6Vk/HEBJ+zUcm5wrUM3+PQsGf7IYnXTbeIfHHpx4HeSeWhnLAjqZjADQwW8uA4rBmVbg==", + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/ref-transform/node_modules/@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/ref-transform/node_modules/@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.4.tgz", + "integrity": "sha512-W6PtEOs8P8jKYPo3JwaMAozZQivxInUleGfNwI2pK1t8ZLZIxn4kAf7p4VF4jJdQB8SZBzpfWdLUc06j7IOmpQ==", + "dependencies": { + "@vue/reactivity": "3.2.4", + "@vue/shared": "3.2.4" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.4.tgz", + "integrity": "sha512-HcVtLyn2SGwsf6BFPwkvDPDOhOqkOKcfHDpBp5R1coX+qMsOFrY8lJnGXIY+JnxqFjND00E9+u+lq5cs/W7ooA==", + "dependencies": { + "@vue/runtime-core": "3.2.4", + "@vue/shared": "3.2.4", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.19.tgz", + "integrity": "sha512-A9FNT7fgQJXItwdzWREntAgWKVtKYuXHBKGev/H4+ByTu8vB7gQXGcim01QxaJshdNg4dYuH2tEBZXCNCNx+/w==", + "dependencies": { + "@vue/compiler-ssr": "3.2.19", + "@vue/shared": "3.2.19" + }, + "peerDependencies": { + "vue": "3.2.19" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + }, + "node_modules/@vue/shared": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.4.tgz", + "integrity": "sha512-j2j1MRmjalVKr3YBTxl/BClSIc8UQ8NnPpLYclxerK65JIowI4O7n8O8lElveEtEoHxy1d7BelPUDI0Q4bumqg==" + }, + "node_modules/@vuelidate/core": { + "version": "2.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@vuelidate/core/-/core-2.0.0-alpha.24.tgz", + "integrity": "sha512-WwAVpxAUMT7DFFTYNaieGBgz3az8mtV8v/waHJPcBGx/q4g3m6cxe1GONC/L/695XrETO8vJRXLkiqCPXrfIQQ==", + "dependencies": { + "vue-demi": "^0.11.3" + } + }, + "node_modules/@vuelidate/validators": { + "version": "2.0.0-alpha.21", + "resolved": "https://registry.npmjs.org/@vuelidate/validators/-/validators-2.0.0-alpha.21.tgz", + "integrity": "sha512-Ch+dW2hSWxAv+DcCEbpMVB58rylrCRxrGQMvL1gJKtq2SdrIrvw+IfgGL9VtxLx8U8gqlDiqy7M4Ycu59rUSnA==", + "dependencies": { + "vue-demi": "^0.11.3" + } + }, + "node_modules/@vueuse/core": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-6.0.0.tgz", + "integrity": "sha512-PuBfNo/Zv+NkLcZaYWBA1WjqxQhTDC0DMQpoAIJdo/GFul/1SpBbONhUho2zqtOmq8vyGuK200wNFvyA4YUAMg==", + "dependencies": { + "@vueuse/shared": "6.0.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/shared": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-6.0.0.tgz", + "integrity": "sha512-PLjjqL8bxI5q86qk/ifXy572nfQE3rJc1RMem+dKcGayaagMnC4kXHEt64V98DVielSwr2FuYaeFodi4KJrvdg==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/autoprefixer": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", + "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001243", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410", + "dependencies": { + "follow-redirects": "1.5.10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-scroll-lock": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz", + "integrity": "sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.2.tgz", + "integrity": "sha512-jSDZyqJmkKMEMi7SZAgX5UltFdR5NAO43vY0AwTpu4X3sGH7GLLQ83KiUomgrnvZRCeW0yPPnKqnxPqQOER9zQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001261", + "electron-to-chromium": "^1.3.854", + "escalade": "^3.1.1", + "nanocolors": "^0.2.12", + "node-releases": "^1.1.76" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001264", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001264.tgz", + "integrity": "sha512-Ftfqqfcs/ePiUmyaySsQ4PUsdcYyXG2rfoBVsk3iY1ahHaJEw65vfb7Suzqm+cEkwwPIv/XWkg27iCpRavH4zA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "dependencies": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "node_modules/chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "dependencies": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "node_modules/chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/clipboard": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", + "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==" + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/consolidate": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz", + "integrity": "sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.7.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.18.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.1.tgz", + "integrity": "sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.5" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/cross-env/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-env/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cross-env/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/cross-env/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cross-env/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cross-env/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "2.6.18", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.18.tgz", + "integrity": "sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ==" + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.857", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.857.tgz", + "integrity": "sha512-a5kIr2lajm4bJ5E4D3fp8Y/BRB0Dx2VOcCRE5Gtb679mXIME/OFhWler8Gy2ksrf8gFX+EFCSIGA33FB3gqYpg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-ex/node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.16.0.tgz", + "integrity": "sha512-0E2dVvVC7I2Xm1HXyx+ZwPj9CNX4NJjs4K4r+GVsHWyt5Pew3JLD4fI7A91b2jeL0TXE7LlszrwLSTJU9eqehw==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^6.3.0", + "vue-eslint-parser": "^7.10.0" + }, + "engines": { + "node": ">=8.10" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatpickr": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.9.tgz", + "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==" + }, + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dependencies": { + "debug": "=3.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/follow-redirects/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/follow-redirects/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/guid": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/guid/-/guid-0.0.12.tgz", + "integrity": "sha1-kTfFKxhffeEkkLm+vMFmC5Al/gw=", + "deprecated": "Please use node-uuid instead. It is much better." + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "dependencies": { + "import-from": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-from/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", + "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/laravel-vite": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/laravel-vite/-/laravel-vite-0.0.7.tgz", + "integrity": "sha512-ko4Ux1bBXBnGoIFAvhmXuTwZ39RIIzdX2u7cXorfFlNLmSLvB0B5w0zZuykZmWdIK4GrGohLmkAtEYS/5pR08Q==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "deepmerge": "^4.2.2", + "dotenv": "^8.2.0", + "execa": "^5.0.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.topath": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", + "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/maska": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/maska/-/maska-1.4.6.tgz", + "integrity": "sha512-dEZcoGp5Wufm2PZ4qZD81WKNaWO6XBIiHLazt5xShl4lydlH/5ZoLGEyJfzBaREXbAnsE5THShLyJKIaIeIuvA==" + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.3.3.tgz", + "integrity": "sha512-+fA2oRcR1dJI/7ITmeQJDrYWks0wodlOz0pAEhKYJ2IVc1z0AnwJUsKY2fzFmPAM3Jo9J0rBx8JAA9QQSJ5PuA==", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/modern-normalize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanocolors": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.12.tgz", + "integrity": "sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.1.28", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.28.tgz", + "integrity": "sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-releases": { + "version": "1.1.77", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", + "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/orderedmap": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.1.tgz", + "integrity": "sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "2.0.0-rc.6", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.0-rc.6.tgz", + "integrity": "sha512-IqArmLmWJB5wZzELZfFF42bMaulo6cjMvL1wgUjWfmzaGCt1HYOAXN86s6HrdAueeEWj9Ov6lNNOHB1DFQxthw==", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.15", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.1", + "typescript": "^4.3.5", + "vue": "^2.6.14 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", + "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1", + "postcss": "^8.1.6" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz", + "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==", + "dev": true, + "dependencies": { + "import-cwd": "^3.0.0", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-modules": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", + "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", + "dev": true, + "dependencies": { + "generic-names": "^2.0.1", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz", + "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.13" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.1.10.tgz", + "integrity": "sha512-IWyBBXNAd44RM6NnBPljwq+/CM2oYCQJkF+YhKEAZNwzW0uFdGf4qComhjbKZzqFdu6Iub2ZhNsXgwPibA0lCQ==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.3.5.tgz", + "integrity": "sha512-tNUwcF2lPAkwKBZPZRtbxpwljnODRNZ3eiYloN1DSUqDjMT1nBZm0nejaEMS1TvNQ+3amibUSAiV4hX+jpASFA==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.0.tgz", + "integrity": "sha512-yCLy5+0rVqLir/KcHFathQj4Rf8aRHi80FmEfKtM0JmyzvwdomslLzDZ/pX4oFhFKDgjl/WBBBFNqDyNifWg7g==", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.2.0.tgz", + "integrity": "sha512-B9v9xtf4fYbKxQwIr+3wtTDNLDZcmMMmGiI3TAPShnUzvo+Rmv1GiUrsQChY1meetHl7rhML2cppF3FTs7f7UQ==", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.1.3.tgz", + "integrity": "sha512-ZaHCLyBtvbyIHv0f5p6boQTIJjlD6o2NPZiEaZWT2DA+j591zS29QQEMT4lBqwcLW3qRSf7ZvoKNbf05YrsStw==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.4.tgz", + "integrity": "sha512-Al8cVUOnDFL4gcI5IDlG6xbZ0aOD/i3B17VT+1JbHWDguCgt/lBHVTHUBcKvvbSg6+q/W4Nj1Fu6bwZSca3xjg==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.14.3.tgz", + "integrity": "sha512-yzZlBaSxfUPIIP6U5Edh5zKxJPZ5f7bwZRhiCuH3UYkWhj+P3d8swHsbuAMOu/iDatDc5J/Qs5Mb3++mZf+CvQ==", + "dependencies": { + "orderedmap": "^1.1.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.6.tgz", + "integrity": "sha512-aFGEdaCWmJzouZ8DwedmvSsL50JpRkqhQ6tcpThwJONVVmCgI36LJHtoQ4VGZbusMavaBhXXr33zyD2IVsTlkw==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-state": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.4.tgz", + "integrity": "sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.3.3.tgz", + "integrity": "sha512-9NLVXy1Sfa2G6qPqhWMkEvwQQMTw7OyTqOZbJaGQWsCeH3hH5Cw+c5eNaLM1Uu75EyKLsEZhJ93XpHJBa6RX8A==", + "dependencies": { + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.20.1.tgz", + "integrity": "sha512-djWORhy3a706mUH4A2dgEEV0IPZqQd1tFyz/ZVHJNoqhSgq82FwG6dq7uqHeUB2KdVSNfI2yc3rwfqlC/ll2pA==", + "dependencies": { + "prosemirror-model": "^1.14.3", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/purgecss": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", + "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", + "dev": true, + "dependencies": { + "commander": "^6.0.0", + "glob": "^7.0.0", + "postcss": "^8.2.1", + "postcss-selector-parser": "^6.0.2" + }, + "bin": { + "purgecss": "bin/purgecss.js" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "dev": true, + "dependencies": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sass": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.38.0.tgz", + "integrity": "sha512-WBccZeMigAGKoI+NgD7Adh0ab1HUq+6BmyBUEaGxtErbUtWUevEbdgo5EZiJQofLUGcKtlNaO2IdN73AHEua5g==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tailwind-scrollbar": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tailwind-scrollbar/-/tailwind-scrollbar-1.3.1.tgz", + "integrity": "sha512-FeYuLxLtCRMO4PmjPJCzm5wQouFro2BInZXKPxqg54DR/55NAHoS8uNYWMiRG5l6qsLkWBfVEM34gq2XAQUwVg==", + "dev": true, + "dependencies": { + "tailwindcss": ">1.9.6" + } + }, + "node_modules/tailwind-scrollbar/node_modules/color": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", + "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.6.0" + } + }, + "node_modules/tailwind-scrollbar/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tailwind-scrollbar/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwind-scrollbar/node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/tailwind-scrollbar/node_modules/tailwindcss": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.16.tgz", + "integrity": "sha512-EireCtpQyyJ4Xz8NYzHafBoy4baCOO96flM0+HgtsFcIQ9KFy/YBK3GEtlnD+rXen0e4xm8t3WiUcKBJmN6yjg==", + "dev": true, + "dependencies": { + "arg": "^5.0.1", + "bytes": "^3.0.0", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "color": "^4.0.1", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.1", + "html-tags": "^3.1.0", + "is-color-stop": "^1.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.11.0", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^3.0.3", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", + "quick-lru": "^5.1.1", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "autoprefixer": "^10.0.2", + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.7.tgz", + "integrity": "sha512-jv35rugP5j8PpzbXnsria7ZAry7Evh0KtQ4MZqNd+PhF+oIKPwJTVwe/rmfRx9cZw3W7iPZyzBmeoAoNwfJ1yg==", + "dev": true, + "dependencies": { + "arg": "^5.0.0", + "bytes": "^3.0.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.2", + "color": "^3.2.0", + "cosmiconfig": "^7.0.0", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.0", + "html-tags": "^3.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.8.1", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^3.0.3", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.5", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", + "quick-lru": "^5.1.1", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "autoprefixer": "^10.0.2", + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "engines": { + "node": "*" + } + }, + "node_modules/tippy.js": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.2.tgz", + "integrity": "sha512-35XVQI7Zl/jHZ51+8eHu/vVRXBjWYGobPm5G9FxOchj4r5dWhghKGS0nm0ARUKZTF96V7pPn7EbXS191NTwldw==", + "dependencies": { + "@popperjs/core": "^2.9.0" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v-money3": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/v-money3/-/v-money3-3.16.1.tgz", + "integrity": "sha512-U0GjmdybvEwfxCpZiTUbKugSglJbX6wxlyMeg0YJdLTAKlnjMRDph3hpNJlTlg5Gs8MQRpDVdaLysBjV749HLg==" + }, + "node_modules/v-tooltip": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.1.3.tgz", + "integrity": "sha512-xXngyxLQTOx/yUEy50thb8te7Qo4XU6h4LZB6cvEfVd9mnysUxLEoYwGWDdqR+l69liKsy3IPkdYff3J1gAJ5w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "lodash": "^4.17.21", + "popper.js": "^1.16.1", + "vue-resize": "^1.0.1" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vite": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.5.0.tgz", + "integrity": "sha512-Dn4B+g54PJsMG5WCc4QeFy1ygMXRdTtFrUPegqfk4+vzVQcbF/DqqmI/1bxezArzbujBJg/67QeT5wz8edfJVQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.12.17", + "postcss": "^8.3.6", + "resolve": "^1.20.0", + "rollup": "^2.38.5" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vue": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.4.tgz", + "integrity": "sha512-rNCFmoewm8IwmTK0nj3ysKq53iRpNEFKoBJ4inar6tIh7Oj7juubS39RI8UI+VE7x+Cs2z6PBsadtZu7z2qppg==", + "dependencies": { + "@vue/compiler-dom": "3.2.4", + "@vue/runtime-dom": "3.2.4", + "@vue/shared": "3.2.4" + } + }, + "node_modules/vue-demi": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.11.4.tgz", + "integrity": "sha512-/3xFwzSykLW2HiiLie43a+FFgNOcokbBJ+fzvFXd0r2T8MYohqvphUyDQ8lbAwzQ3Dlcrb1c9ykifGkhSIAk6A==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", + "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8.10" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/vue-flatpickr-component": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/vue-flatpickr-component/-/vue-flatpickr-component-9.0.4.tgz", + "integrity": "sha512-E8XfzLhrPsQBtZluWYEn3m21VHn7PArYnel3QPYL3auBrVMc07WaK6b20e04OK8LUCq9V+OKNZe4MoI0znY/Hw==", + "dependencies": { + "flatpickr": "^4.6.9" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-i18n": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.1.7.tgz", + "integrity": "sha512-ujuuDanoHqtEd4GejWrbG/fXE9nrP51ElsEGxp0WBHfv+/ki0/wyUqkO+4fLikki2obGtXdviTPH0VNpas5K6g==", + "dependencies": { + "@intlify/core-base": "9.1.7", + "@intlify/shared": "9.1.7", + "@intlify/vue-devtools": "9.1.7", + "@vue/devtools-api": "^6.0.0-beta.7" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-resize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-1.0.1.tgz", + "integrity": "sha512-z5M7lJs0QluJnaoMFTIeGx6dIkYxOwHThlZDeQnWZBizKblb99GSejPnK37ZbNE/rVwDcYcHY+Io+AxdpY952w==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "vue": "^2.6.0" + } + }, + "node_modules/vue-router": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.11.tgz", + "integrity": "sha512-sha6I8fx9HWtvTrFZfxZkiQQBpqSeT+UCwauYjkdOQYRvwsGwimlQQE2ayqUwuuXGzquFpCPoXzYKWlzL4OuXg==", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.14" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vue-types/-/vue-types-4.1.0.tgz", + "integrity": "sha512-oPAeKKx5vY5Q8c7lMQPQyrBIbmWQGael5XEHqO1f+Y3V/RUZNuISz7KxI4woGjh79Vy/gDDaPX9j9zKYpaaA2g==", + "dependencies": { + "is-plain-object": "5.0.0" + }, + "engines": { + "node": ">=12.16.0" + }, + "peerDependencies": { + "vue": "^2.0.0 || ^3.0.0" + } + }, + "node_modules/vue3-colorpicker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vue3-colorpicker/-/vue3-colorpicker-1.0.8.tgz", + "integrity": "sha512-QwAk8Ttu4aoZdIuBETB5Mn6ZE8/95cf7HeLjnEVF83ABqUYTbH7sZQww/AoNWvJhq05txFqiuFGXaS47aPpZdQ==", + "dependencies": { + "@aesoper/normal-utils": "^0.1.5", + "@popperjs/core": "^2.10.1", + "@vueuse/core": "^6.5.3", + "lodash-es": "^4.17.21", + "tinycolor2": "^1.4.2", + "vue": "^3.2.6", + "vue3-normal-directive": "^0.1.4", + "vue3-normal-library": "^0.1.6", + "vue3-storage": "^0.1.11" + }, + "peerDependencies": { + "@aesoper/normal-utils": "^0.1.5", + "@popperjs/core": "^2.10.1", + "@vueuse/core": "^6.5.3", + "lodash-es": "^4.17.21", + "tinycolor2": "^1.4.2", + "vue": "^3.2.6", + "vue3-normal-directive": "^0.1.4", + "vue3-normal-library": "^0.1.6", + "vue3-storage": "^0.1.11" + } + }, + "node_modules/vue3-colorpicker/node_modules/@popperjs/core": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz", + "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/vue3-colorpicker/node_modules/@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/vue3-colorpicker/node_modules/@vue/compiler-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.19.tgz", + "integrity": "sha512-WzQoE8rfkFjPtIioc7SSgTsnz9g2oG61DU8KHnzPrRS7fW/lji6H2uCYJfp4Z6kZE8GjnHc1Ljwl3/gxDes0cw==", + "dependencies": { + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-colorpicker/node_modules/@vue/compiler-sfc": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.19.tgz", + "integrity": "sha512-pLlbgkO1UHTO02MSpa/sFOXUwIDxSMiKZ1ozE5n71CY4DM+YmI+G3gT/ZHZ46WBId7f3VTF/D8pGwMygcQbrQA==", + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.19", + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-ssr": "3.2.19", + "@vue/ref-transform": "3.2.19", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/vue3-colorpicker/node_modules/@vue/reactivity": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.19.tgz", + "integrity": "sha512-FtachoYs2SnyrWup5UikP54xDX6ZJ1s5VgHcJp4rkGoutU3Ry61jhs+nCX7J64zjX992Mh9gGUC0LqTs8q9vCA==", + "dependencies": { + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-colorpicker/node_modules/@vue/runtime-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.19.tgz", + "integrity": "sha512-qArZSWKxWsgKfxk9BelZ32nY0MZ31CAW2kUUyVJyxh4cTfHaXGbjiQB5JgsvKc49ROMNffv9t3/qjasQqAH+RQ==", + "dependencies": { + "@vue/reactivity": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-colorpicker/node_modules/@vue/runtime-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.19.tgz", + "integrity": "sha512-hIRboxXwafeHhbZEkZYNV0MiJXPNf4fP0X6hM2TJb0vssz8BKhD9cF92BkRgZztTQevecbhk0gu4uAPJ3dxL9A==", + "dependencies": { + "@vue/runtime-core": "3.2.19", + "@vue/shared": "3.2.19", + "csstype": "^2.6.8" + } + }, + "node_modules/vue3-colorpicker/node_modules/@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + }, + "node_modules/vue3-colorpicker/node_modules/@vueuse/core": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-6.5.3.tgz", + "integrity": "sha512-o3CTu4nEqs371sDY5qLBX0r4QOm6GVpm3ApQc2Y+p8OMI2rRGartQo8xRykpUfsyq602A+SVtm/wxIWBkD/KCQ==", + "dependencies": { + "@vueuse/shared": "6.5.3", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/vue3-colorpicker/node_modules/@vueuse/shared": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-6.5.3.tgz", + "integrity": "sha512-ChOKu3mECyZeqGJ/gHVm0CaHoZK5/TwNZr1ZM/aqH+RaRNQvC1qkLf1/8PBugzN3yRgC3BtZ/M1kLpGe/BFylw==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/vue3-colorpicker/node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/vue3-colorpicker/node_modules/vue": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.19.tgz", + "integrity": "sha512-6KAMdIfAtlK+qohTIUE4urwAv4A3YRuo8uAbByApUmiB0CziGAAPs6qVugN6oHPia8YIafHB/37K0O6KZ7sGmA==", + "dependencies": { + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-sfc": "3.2.19", + "@vue/runtime-dom": "3.2.19", + "@vue/server-renderer": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-colorpicker/node_modules/vue3-storage": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/vue3-storage/-/vue3-storage-0.1.11.tgz", + "integrity": "sha512-4pLQUMeGFduP2IaFage8Y/9AtUljKkm3z9N4ko30kTcKDwyr7JXOAsNFjYqw58SWNNLQdXqaGGAxZFVnk/JfUg==", + "dependencies": { + "core-js": "^3.6.5", + "cross-env": "^7.0.3", + "vue": "^3.0.0", + "vue-class-component": "^8.0.0-0", + "vue-router": "^4.0.0-0" + }, + "peerDependencies": { + "core-js": "^3.6.5", + "vue": "^3.0.0" + } + }, + "node_modules/vue3-colorpicker/node_modules/vue3-storage/node_modules/vue-class-component": { + "version": "8.0.0-rc.1", + "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-8.0.0-rc.1.tgz", + "integrity": "sha512-w1nMzsT/UdbDAXKqhwTmSoyuJzUXKrxLE77PCFVuC6syr8acdFDAq116xgvZh9UCuV0h+rlCtxXolr3Hi3HyPQ==", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue3-normal-directive": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/vue3-normal-directive/-/vue3-normal-directive-0.1.4.tgz", + "integrity": "sha512-aO1xGJqdgb0a6LkMn1Q5GAkjISL6fCdhedMegFBLNKVlMDEi3YY+Vx9SaNEuLmQHCuQUY91m0TS17S/WSrn90g==", + "dependencies": { + "body-scroll-lock": "^3.1.5", + "clipboard": "^2.0.6", + "lodash-es": "^4.17.21", + "vue": "^3.2.6" + }, + "peerDependencies": { + "body-scroll-lock": "^3.1.5", + "clipboard": "^2.0.6", + "lodash-es": "^4.17.21", + "vue": "^3.2.6" + } + }, + "node_modules/vue3-normal-directive/node_modules/@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/vue3-normal-directive/node_modules/@vue/compiler-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.19.tgz", + "integrity": "sha512-WzQoE8rfkFjPtIioc7SSgTsnz9g2oG61DU8KHnzPrRS7fW/lji6H2uCYJfp4Z6kZE8GjnHc1Ljwl3/gxDes0cw==", + "dependencies": { + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-normal-directive/node_modules/@vue/compiler-sfc": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.19.tgz", + "integrity": "sha512-pLlbgkO1UHTO02MSpa/sFOXUwIDxSMiKZ1ozE5n71CY4DM+YmI+G3gT/ZHZ46WBId7f3VTF/D8pGwMygcQbrQA==", + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.19", + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-ssr": "3.2.19", + "@vue/ref-transform": "3.2.19", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/vue3-normal-directive/node_modules/@vue/reactivity": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.19.tgz", + "integrity": "sha512-FtachoYs2SnyrWup5UikP54xDX6ZJ1s5VgHcJp4rkGoutU3Ry61jhs+nCX7J64zjX992Mh9gGUC0LqTs8q9vCA==", + "dependencies": { + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-normal-directive/node_modules/@vue/runtime-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.19.tgz", + "integrity": "sha512-qArZSWKxWsgKfxk9BelZ32nY0MZ31CAW2kUUyVJyxh4cTfHaXGbjiQB5JgsvKc49ROMNffv9t3/qjasQqAH+RQ==", + "dependencies": { + "@vue/reactivity": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-normal-directive/node_modules/@vue/runtime-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.19.tgz", + "integrity": "sha512-hIRboxXwafeHhbZEkZYNV0MiJXPNf4fP0X6hM2TJb0vssz8BKhD9cF92BkRgZztTQevecbhk0gu4uAPJ3dxL9A==", + "dependencies": { + "@vue/runtime-core": "3.2.19", + "@vue/shared": "3.2.19", + "csstype": "^2.6.8" + } + }, + "node_modules/vue3-normal-directive/node_modules/@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + }, + "node_modules/vue3-normal-directive/node_modules/vue": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.19.tgz", + "integrity": "sha512-6KAMdIfAtlK+qohTIUE4urwAv4A3YRuo8uAbByApUmiB0CziGAAPs6qVugN6oHPia8YIafHB/37K0O6KZ7sGmA==", + "dependencies": { + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-sfc": "3.2.19", + "@vue/runtime-dom": "3.2.19", + "@vue/server-renderer": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-normal-library": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/vue3-normal-library/-/vue3-normal-library-0.1.6.tgz", + "integrity": "sha512-TSqCeD092ETnjqamNKtXencLnG4a+NVWFZgalmyPtFH1FHvpxLP7eptT8krOL2sZVspficic8DghfDakw3tKRQ==", + "dependencies": { + "lodash-es": "^4.17.21", + "raf": "^3.4.1", + "vue": "^3.2.6", + "vue-types": "^4.1.0" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.2.6", + "vue": "^3.2.6" + } + }, + "node_modules/vue3-normal-library/node_modules/@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/vue3-normal-library/node_modules/@vue/compiler-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.19.tgz", + "integrity": "sha512-WzQoE8rfkFjPtIioc7SSgTsnz9g2oG61DU8KHnzPrRS7fW/lji6H2uCYJfp4Z6kZE8GjnHc1Ljwl3/gxDes0cw==", + "dependencies": { + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-normal-library/node_modules/@vue/compiler-sfc": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.19.tgz", + "integrity": "sha512-pLlbgkO1UHTO02MSpa/sFOXUwIDxSMiKZ1ozE5n71CY4DM+YmI+G3gT/ZHZ46WBId7f3VTF/D8pGwMygcQbrQA==", + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.19", + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-ssr": "3.2.19", + "@vue/ref-transform": "3.2.19", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/vue3-normal-library/node_modules/@vue/reactivity": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.19.tgz", + "integrity": "sha512-FtachoYs2SnyrWup5UikP54xDX6ZJ1s5VgHcJp4rkGoutU3Ry61jhs+nCX7J64zjX992Mh9gGUC0LqTs8q9vCA==", + "dependencies": { + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-normal-library/node_modules/@vue/runtime-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.19.tgz", + "integrity": "sha512-qArZSWKxWsgKfxk9BelZ32nY0MZ31CAW2kUUyVJyxh4cTfHaXGbjiQB5JgsvKc49ROMNffv9t3/qjasQqAH+RQ==", + "dependencies": { + "@vue/reactivity": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/vue3-normal-library/node_modules/@vue/runtime-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.19.tgz", + "integrity": "sha512-hIRboxXwafeHhbZEkZYNV0MiJXPNf4fP0X6hM2TJb0vssz8BKhD9cF92BkRgZztTQevecbhk0gu4uAPJ3dxL9A==", + "dependencies": { + "@vue/runtime-core": "3.2.19", + "@vue/shared": "3.2.19", + "csstype": "^2.6.8" + } + }, + "node_modules/vue3-normal-library/node_modules/@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + }, + "node_modules/vue3-normal-library/node_modules/vue": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.19.tgz", + "integrity": "sha512-6KAMdIfAtlK+qohTIUE4urwAv4A3YRuo8uAbByApUmiB0CziGAAPs6qVugN6oHPia8YIafHB/37K0O6KZ7sGmA==", + "dependencies": { + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-sfc": "3.2.19", + "@vue/runtime-dom": "3.2.19", + "@vue/server-renderer": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "node_modules/vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "dependencies": { + "sortablejs": "1.14.0" + }, + "peerDependencies": { + "vue": "^3.0.1" + } + }, + "node_modules/w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@aesoper/normal-utils": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@aesoper/normal-utils/-/normal-utils-0.1.5.tgz", + "integrity": "sha512-LFF/6y6h5mfwhnJaWqqxuC8zzDaHCG62kMRkd8xhDtq62TQj9dM17A9DhE87W7DhiARJsHLgcina/9P4eNCN1w==" + }, + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } + } + }, + "@babel/parser": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", + "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==" + }, + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } + } + } + }, + "@headlessui/vue": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.4.0.tgz", + "integrity": "sha512-BBLDciyKiGK03whaSVkUacDY2Cd5AR05JCUPWQLvQ9HtjQc9tv5RyPpcdmoXJa+XWI10e3U1JxL+8FY7kJMcEQ==" + }, + "@heroicons/vue": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@heroicons/vue/-/vue-1.0.4.tgz", + "integrity": "sha512-jm7JMoUGr7Asn07oYNmewxkdQALnskTzRo17iGpHG/apLcc+GFdvdN4XvWZ2awStodaqeZ4eYWg7UcI0LvLETQ==" + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@intlify/core-base": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.1.7.tgz", + "integrity": "sha512-q1W2j81xbHyfKrNcca/CeJyf0Bcx4u9UDu05l7AaiJbqOseTme2o2I3wp1hDDCtmC7k7HgX0sAygyHNJH9swuQ==", + "requires": { + "@intlify/devtools-if": "9.1.7", + "@intlify/message-compiler": "9.1.7", + "@intlify/message-resolver": "9.1.7", + "@intlify/runtime": "9.1.7", + "@intlify/shared": "9.1.7", + "@intlify/vue-devtools": "9.1.7" + } + }, + "@intlify/devtools-if": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.1.7.tgz", + "integrity": "sha512-/DcN5FUySSkQhDqx5y1RvxfuCXO3Ot/dUEIOs472qbM7Hyb2qif+eXCnwHBzlI4+wEfQVT6L0PiM1a7Er/ro9g==", + "requires": { + "@intlify/shared": "9.1.7" + } + }, + "@intlify/message-compiler": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.1.7.tgz", + "integrity": "sha512-JZNkAhr3O7tnbdbRBcpYfqr/Ai26WTzX0K/lV8Y1KVdOIj/dGiamaffdWUdFiDXUnbJRNbPiOaKxy7Pwip3KxQ==", + "requires": { + "@intlify/message-resolver": "9.1.7", + "@intlify/shared": "9.1.7", + "source-map": "0.6.1" + } + }, + "@intlify/message-resolver": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.1.7.tgz", + "integrity": "sha512-WTK+OaXJYjyquLGhuCyDvU2WHkG+kXzXeHagmVFHn+s118Jf2143zzkLLUrapP5CtZ/csuyjmYg7b3xQRQAmvw==" + }, + "@intlify/runtime": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.1.7.tgz", + "integrity": "sha512-QURPSlzhOVnRwS2XMGpCDsDkP42kfVBh94aAORxh/gVGzdgJip2vagrIFij/J69aEqdB476WJkMhVjP8VSHmiA==", + "requires": { + "@intlify/message-compiler": "9.1.7", + "@intlify/message-resolver": "9.1.7", + "@intlify/shared": "9.1.7" + } + }, + "@intlify/shared": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.1.7.tgz", + "integrity": "sha512-zt0zlUdalumvT9AjQNxPXA36UgOndUyvBMplh8uRZU0fhWHAwhnJTcf0NaG9Qvr8I1n3HPSs96+kLb/YdwTavQ==" + }, + "@intlify/vue-devtools": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.1.7.tgz", + "integrity": "sha512-DI5Wc0aOiohtBUGUkKAcryCWbbuaO4/PK4Pa/LaNCsFNxbtgR5qkIDmhBv9xVPYGTUhySXxaDDAMvOpBjhPJjw==", + "requires": { + "@intlify/message-resolver": "9.1.7", + "@intlify/runtime": "9.1.7", + "@intlify/shared": "9.1.7" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@popperjs/core": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.3.tgz", + "integrity": "sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ==" + }, + "@tailwindcss/forms": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.3.tgz", + "integrity": "sha512-U8Fi/gq4mSuaLyLtFISwuDYzPB73YzgozjxOIHsK6NXgg/IWD1FLaHbFlWmurAMyy98O+ao74ksdQefsquBV1Q==", + "requires": { + "mini-svg-data-uri": "^1.2.3" + } + }, + "@tiptap/core": { + "version": "2.0.0-beta.99", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.99.tgz", + "integrity": "sha512-DoSIgeYyWGWTDVHyquVM5SM61T4U8kKWjlmOtSPcee13Z5zXrbCBSxCTgtC3uh7I+OcoE/PNQQFMU9yWZzKnhw==", + "requires": { + "@types/prosemirror-commands": "^1.0.4", + "@types/prosemirror-inputrules": "^1.0.4", + "@types/prosemirror-keymap": "^1.0.4", + "@types/prosemirror-model": "^1.13.1", + "@types/prosemirror-schema-list": "^1.0.3", + "@types/prosemirror-state": "^1.2.7", + "@types/prosemirror-transform": "^1.1.4", + "@types/prosemirror-view": "^1.17.2", + "prosemirror-commands": "^1.1.10", + "prosemirror-inputrules": "^1.1.3", + "prosemirror-keymap": "^1.1.3", + "prosemirror-model": "^1.14.3", + "prosemirror-schema-list": "^1.1.5", + "prosemirror-state": "^1.3.4", + "prosemirror-transform": "^1.3.2", + "prosemirror-view": "^1.19.0" + } + }, + "@tiptap/extension-blockquote": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.15.tgz", + "integrity": "sha512-Cso44KsYsqKqaNveQmx5KVaLy9krq5AzE9WhGVDBSFqWhvuIJkQYrTRBbOTfUDs/st9VuwJrbjTDD65ow50wEw==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-bold": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.15.tgz", + "integrity": "sha512-jKyV6iiwhxwa0+7uuKD74jNDVNLNOS1GmU14MgaA95pY5e1fyaRBPPX8Gtt89niz2CLOY711AV17RPZTe/e60w==" + }, + "@tiptap/extension-bubble-menu": { + "version": "2.0.0-beta.39", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.39.tgz", + "integrity": "sha512-hmA+ePR+MnRaTJ5MxoZ3yqOcK54cW2KQllZx16ZwSyM+yU9bXVhfMmyZwqRD7GGQFkrfnPm5QnedXDBYJD19OQ==", + "requires": { + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.20.1", + "tippy.js": "^6.3.1" + } + }, + "@tiptap/extension-bullet-list": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.15.tgz", + "integrity": "sha512-5i44JzsZOh8Ci6CuYRQy6W3jCpYgX0+VuJKeHvZ6Aomy4Qqrtc9Jk43PBmCj91lNUUtH6Io9l+kDrLCumEFnEg==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-code": { + "version": "2.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.0-beta.16.tgz", + "integrity": "sha512-Kakg/RMiVrxjzIkLVDXtbCzRh/9W8dgSG04IhMZNOI8N9vWn8Z78jdUyxEEDTcL/JyWWcMxn9AsJw2U5ajO3pA==" + }, + "@tiptap/extension-code-block": { + "version": "2.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.18.tgz", + "integrity": "sha512-E2gz7ovl9nXLZzheqLyN3hi7A10fCaodDn4DvIl4wiEbKZpF7WFBNeb+FQetWNay9UWNeDO94SCX9+rT9H+yHA==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-document": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.0.0-beta.13.tgz", + "integrity": "sha512-nrufdKziA/wovaY4DjGkc8OGuIZi8CH8CW3+yYfeWbruwFKkyZHlZy9nplFWSEqBHPAeqD+px9r91yGMW3ontA==" + }, + "@tiptap/extension-dropcursor": { + "version": "2.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.19.tgz", + "integrity": "sha512-rslIcVvD42NNh5sEbkCkG03DWMFBrS5KoK+lDOdIcC1DjmTtpVgcLvvE01btzaB3ljx+UVqI2Zaxa6VOiTeEMw==", + "requires": { + "@types/prosemirror-dropcursor": "^1.0.3", + "prosemirror-dropcursor": "^1.3.5" + } + }, + "@tiptap/extension-floating-menu": { + "version": "2.0.0-beta.33", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.33.tgz", + "integrity": "sha512-8s8DPnHIzXg7E7S/DjuS1AAFZKVYXY0KBKaEd1f2V45YOkKwN9El46Ugk/4Ir3yrrllvnisbP9ol+BAQmI0bMg==", + "requires": { + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.20.1", + "tippy.js": "^6.3.1" + } + }, + "@tiptap/extension-gapcursor": { + "version": "2.0.0-beta.24", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.24.tgz", + "integrity": "sha512-/6Ru0wNLIb3fo30Ar3z/rcakoUA2EIJL9sBFiuyHWTAIujeEaBzA6oG5L4PpP+daKd31JF0I6LjeWMSU9CBSFw==", + "requires": { + "@types/prosemirror-gapcursor": "^1.0.4", + "prosemirror-gapcursor": "^1.2.0" + } + }, + "@tiptap/extension-hard-break": { + "version": "2.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.21.tgz", + "integrity": "sha512-Ukl+wjfLhE0tW7lWRpSPPo2tajjGnEaSc/Irey1JineFf+x/azA9rREzQy0r2AhORTalH7lj/KDmSdG8IT6syA==" + }, + "@tiptap/extension-heading": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.15.tgz", + "integrity": "sha512-UoXDwEdCV9KiPh0wj0jj2Jt6VDqkoTaSU3d9bmEBLwg1Gjgbuv39JDst7oxSqbf9rgbl3txbeOy35wVBKe9CqA==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-history": { + "version": "2.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.0-beta.16.tgz", + "integrity": "sha512-nrNwV8a7zUt1t2I/kPX5Y6N9vZ8mrugimJIQmPGIp/4mmw1SEUzkaPpIsv6+ELmqMHSDktQ0ofb3pXeWDXWZvw==", + "requires": { + "@types/prosemirror-history": "^1.0.3", + "prosemirror-history": "^1.2.0" + } + }, + "@tiptap/extension-horizontal-rule": { + "version": "2.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.21.tgz", + "integrity": "sha512-fgvRGuNEGWAitbcoz6VZSR9gcVIHksTy2QpXPnQC+N9Mi7havaxreYdMZn+oePW/5kdZoZNRx+jsf5DjKomvoQ==", + "requires": { + "prosemirror-state": "^1.3.4" + } + }, + "@tiptap/extension-italic": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.15.tgz", + "integrity": "sha512-ZCz1vCysLdvOUrwODuyBP0BDaemCLh6ib7qTYoSDKdive9kfn0Vc5Fg3o8xgHrtrUfwKIJz/sWOknjDEGIc9cw==" + }, + "@tiptap/extension-list-item": { + "version": "2.0.0-beta.14", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.14.tgz", + "integrity": "sha512-t6xwEqP+d5443Ul2Jvqz9kXb3ro7bA7yY9HA0vskm3120WxxHW9jxgxZN+82Ot5Tm7nXOAlsN6vuqnt4idnxZQ==" + }, + "@tiptap/extension-ordered-list": { + "version": "2.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.16.tgz", + "integrity": "sha512-3n0h5FBfQqBrN/zqF/Ngoyd1bZxeIRLwWI7ak4KulpvOg5V/yw3sw5CSxr2f13ZI9AgGaTq8yOsTYs9dkCCnsQ==", + "requires": { + "prosemirror-inputrules": "^1.1.3" + } + }, + "@tiptap/extension-paragraph": { + "version": "2.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.17.tgz", + "integrity": "sha512-qCQVCf9c2hgaeIdfy22PaoZyW5Vare/1aGkOEAaZma5RjrUbV9hrRKwoW9LsDjnh1EN1fIeKdg02yEhnHWtG8A==" + }, + "@tiptap/extension-strike": { + "version": "2.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.17.tgz", + "integrity": "sha512-+WRd0RuCK4+jFKNVN+4rHTa5VMqqGDO2uc+TknkqhFqWp/z96OAGlpHJOwPrnW1fLbpjEBBQIr1vVYSw6KgcZg==" + }, + "@tiptap/extension-text": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.13.tgz", + "integrity": "sha512-0EtAwuRldCAoFaL/iXgkRepEeOd55rPg5N4FQUN1xTwZT7PDofukP0DG/2jff/Uj17x4uTaJAa9qlFWuNnDvjw==" + }, + "@tiptap/starter-kit": { + "version": "2.0.0-beta.97", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.97.tgz", + "integrity": "sha512-ySnJPG6px/Pv99TGCrgXOi7Ahh1qkpV171C791lLlFuH+lXMo719bWaeCTEiBDxjamVzh18nEJkIxyu6sucpSg==", + "requires": { + "@tiptap/core": "^2.0.0-beta.99", + "@tiptap/extension-blockquote": "^2.0.0-beta.15", + "@tiptap/extension-bold": "^2.0.0-beta.15", + "@tiptap/extension-bullet-list": "^2.0.0-beta.15", + "@tiptap/extension-code": "^2.0.0-beta.16", + "@tiptap/extension-code-block": "^2.0.0-beta.17", + "@tiptap/extension-document": "^2.0.0-beta.13", + "@tiptap/extension-dropcursor": "^2.0.0-beta.18", + "@tiptap/extension-gapcursor": "^2.0.0-beta.19", + "@tiptap/extension-hard-break": "^2.0.0-beta.15", + "@tiptap/extension-heading": "^2.0.0-beta.15", + "@tiptap/extension-history": "^2.0.0-beta.15", + "@tiptap/extension-horizontal-rule": "^2.0.0-beta.19", + "@tiptap/extension-italic": "^2.0.0-beta.15", + "@tiptap/extension-list-item": "^2.0.0-beta.14", + "@tiptap/extension-ordered-list": "^2.0.0-beta.15", + "@tiptap/extension-paragraph": "^2.0.0-beta.17", + "@tiptap/extension-strike": "^2.0.0-beta.17", + "@tiptap/extension-text": "^2.0.0-beta.13" + } + }, + "@tiptap/vue-3": { + "version": "2.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@tiptap/vue-3/-/vue-3-2.0.0-beta.52.tgz", + "integrity": "sha512-bHfJuhlCYOp+V3njGS4qQUVwyfjjb7KtPhZwl0FfYSNJ6/BTHYltd6L+UiQzVdcaoWFvPyF47fZajx602B5FGA==", + "requires": { + "@tiptap/extension-bubble-menu": "^2.0.0-beta.29", + "@tiptap/extension-floating-menu": "^2.0.0-beta.23", + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.19.0", + "vue": "^3.0.0" + } + }, + "@types/estree": { + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz", + "integrity": "sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==", + "dev": true + }, + "@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prosemirror-commands": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz", + "integrity": "sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-dropcursor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.3.tgz", + "integrity": "sha512-b0/8njnJ4lwyHKcGuCMf3x7r1KjxyugB1R/c2iMCjplsJHSC7UY9+OysqgJR5uUXRekUSGniiLgBtac/lvH6wg==", + "requires": { + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-gapcursor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.4.tgz", + "integrity": "sha512-9xKjFIG5947dzerFvkLWp6F53JwrUYoYwh3SgcTFEp8SbSfNNrez/PFYVZKPnoqPoaK5WtTdQTaMwpCV9rXQIg==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-history": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.3.tgz", + "integrity": "sha512-5TloMDRavgLjOAKXp1Li8u0xcsspzbT1Cm9F2pwHOkgvQOz1jWQb2VIXO7RVNsFjLBZdIXlyfSLivro3DuMWXg==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-inputrules": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-inputrules/-/prosemirror-inputrules-1.0.4.tgz", + "integrity": "sha512-lJIMpOjO47SYozQybUkpV6QmfuQt7GZKHtVrvS+mR5UekA8NMC5HRIVMyaIauJLWhKU6oaNjpVaXdw41kh165g==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-keymap": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz", + "integrity": "sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg==", + "requires": { + "@types/prosemirror-commands": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-model": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.13.2.tgz", + "integrity": "sha512-a2rDB0aZ+7aIP7uBqQq1wLb4Hg4qqEvpkCqvhsgT/gG8IWC0peCAZfQ24sgTco0qSJLeDgIbtPeU6mgr869/kg==", + "requires": { + "@types/orderedmap": "*" + } + }, + "@types/prosemirror-schema-list": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-list/-/prosemirror-schema-list-1.0.3.tgz", + "integrity": "sha512-uWybOf+M2Ea7rlbs0yLsS4YJYNGXYtn4N+w8HCw3Vvfl6wBAROzlMt0gV/D/VW/7J/LlAjwMezuGe8xi24HzXA==", + "requires": { + "@types/orderedmap": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-state": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.2.7.tgz", + "integrity": "sha512-clJf5uw3/XQnBJtl2RqYXoLMGBySnLYl43xtDvFfQZKkLnnYcM1SDU8dcz7lWjl2Dm+H98RpLOl44pp7DYT+wA==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-transform": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.4.tgz", + "integrity": "sha512-HP1PauvkqSgDquZut8HaLOTUDQ6jja/LAy4OA7tTS1XG7wqRnX3gLUyEj0mD6vFd4y8BPkNddNdOh/BeGHlUjg==", + "requires": { + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-view": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.19.1.tgz", + "integrity": "sha512-fyQ4NVxAdfISWrE2qT8cpZdosXoH/1JuVYMBs9CdaXPbvi/8R2L2tkkcMRM314piKrO8nfYH5OBZKzP2Ax3jtA==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, + "@vitejs/plugin-vue": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-1.4.0.tgz", + "integrity": "sha512-RkqfJHz9wdLKBp5Yi+kQL8BAljdrvPoccQm2PTZc/UcL4EjD11xsv2PPCduYx2oV1a/bpSKA3sD5sxOHFhz+LA==", + "dev": true + }, + "@vue/compiler-core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.4.tgz", + "integrity": "sha512-c8NuQq7mUXXxA4iqD5VUKpyVeklK53+DMbojYMyZ0VPPrb0BUWrZWFiqSDT+MFDv0f6Hv3QuLiHWb1BWMXBbrw==", + "requires": { + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", + "@vue/shared": "3.2.4", + "estree-walker": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.4.tgz", + "integrity": "sha512-uj1nwO4794fw2YsYas5QT+FU/YGrXbS0Qk+1c7Kp1kV7idhZIghWLTjyvYibpGoseFbYLPd+sW2/noJG5H04EQ==", + "requires": { + "@vue/compiler-core": "3.2.4", + "@vue/shared": "3.2.4" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.4.tgz", + "integrity": "sha512-GM+ouDdDzhqgkLmBH4bgq4kiZxJQArSppJiZHWHIx9XRaefHLmc1LBNPmN8ivm4SVfi2i7M2t9k8ZnjsScgzPQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.13.9", + "@babel/types": "^7.13.0", + "@types/estree": "^0.0.48", + "@vue/compiler-core": "3.2.4", + "@vue/compiler-dom": "3.2.4", + "@vue/compiler-ssr": "3.2.4", + "@vue/shared": "3.2.4", + "consolidate": "^0.16.0", + "estree-walker": "^2.0.1", + "hash-sum": "^2.0.0", + "lru-cache": "^5.1.1", + "magic-string": "^0.25.7", + "merge-source-map": "^1.1.0", + "postcss": "^8.1.10", + "postcss-modules": "^4.0.0", + "postcss-selector-parser": "^6.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.4.tgz", + "integrity": "sha512-c8NuQq7mUXXxA4iqD5VUKpyVeklK53+DMbojYMyZ0VPPrb0BUWrZWFiqSDT+MFDv0f6Hv3QuLiHWb1BWMXBbrw==", + "dev": true, + "requires": { + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", + "@vue/shared": "3.2.4", + "estree-walker": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.4.tgz", + "integrity": "sha512-bKZuXu9/4XwsFHFWIKQK+5kN7mxIIWmMmT2L4VVek7cvY/vm3p4WTsXYDGZJy0htOTXvM2ifr6sflg012T0hsw==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.2.4", + "@vue/shared": "3.2.4" + } + } + } + }, + "@vue/compiler-ssr": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.19.tgz", + "integrity": "sha512-oLon0Cn3O7WEYzzmzZavGoqXH+199LT+smdjBT3Uf3UX4HwDNuBFCmvL0TsqV9SQnIgKvBRbQ7lhbpnd4lqM3w==", + "requires": { + "@vue/compiler-dom": "3.2.19", + "@vue/shared": "3.2.19" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.19.tgz", + "integrity": "sha512-WzQoE8rfkFjPtIioc7SSgTsnz9g2oG61DU8KHnzPrRS7fW/lji6H2uCYJfp4Z6kZE8GjnHc1Ljwl3/gxDes0cw==", + "requires": { + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + } + } + }, + "@vue/devtools-api": { + "version": "6.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.0.0-beta.18.tgz", + "integrity": "sha512-56vRhO7nXWWFYTx520BQSDlQH5VYpwy62hFDEqi2yHHEBpEqseOP5WYQusq7BEW3DXSY9E9cfPVR5CFtJbKuMg==" + }, + "@vue/reactivity": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.4.tgz", + "integrity": "sha512-ljWTR0hr8Tn09hM2tlmWxZzCBPlgGLnq/k8K8X6EcJhtV+C8OzFySnbWqMWataojbrQOocThwsC8awKthSl2uQ==", + "requires": { + "@vue/shared": "3.2.4" + } + }, + "@vue/ref-transform": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.19.tgz", + "integrity": "sha512-03wwUnoIAeKti5IGGx6Vk/HEBJ+zUcm5wrUM3+PQsGf7IYnXTbeIfHHpx4HeSeWhnLAjqZjADQwW8uA4rBmVbg==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + } + } + }, + "@vue/runtime-core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.4.tgz", + "integrity": "sha512-W6PtEOs8P8jKYPo3JwaMAozZQivxInUleGfNwI2pK1t8ZLZIxn4kAf7p4VF4jJdQB8SZBzpfWdLUc06j7IOmpQ==", + "requires": { + "@vue/reactivity": "3.2.4", + "@vue/shared": "3.2.4" + } + }, + "@vue/runtime-dom": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.4.tgz", + "integrity": "sha512-HcVtLyn2SGwsf6BFPwkvDPDOhOqkOKcfHDpBp5R1coX+qMsOFrY8lJnGXIY+JnxqFjND00E9+u+lq5cs/W7ooA==", + "requires": { + "@vue/runtime-core": "3.2.4", + "@vue/shared": "3.2.4", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.19.tgz", + "integrity": "sha512-A9FNT7fgQJXItwdzWREntAgWKVtKYuXHBKGev/H4+ByTu8vB7gQXGcim01QxaJshdNg4dYuH2tEBZXCNCNx+/w==", + "requires": { + "@vue/compiler-ssr": "3.2.19", + "@vue/shared": "3.2.19" + }, + "dependencies": { + "@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + } + } + }, + "@vue/shared": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.4.tgz", + "integrity": "sha512-j2j1MRmjalVKr3YBTxl/BClSIc8UQ8NnPpLYclxerK65JIowI4O7n8O8lElveEtEoHxy1d7BelPUDI0Q4bumqg==" + }, + "@vuelidate/core": { + "version": "2.0.0-alpha.24", + "resolved": "https://registry.npmjs.org/@vuelidate/core/-/core-2.0.0-alpha.24.tgz", + "integrity": "sha512-WwAVpxAUMT7DFFTYNaieGBgz3az8mtV8v/waHJPcBGx/q4g3m6cxe1GONC/L/695XrETO8vJRXLkiqCPXrfIQQ==", + "requires": { + "vue-demi": "^0.11.3" + } + }, + "@vuelidate/validators": { + "version": "2.0.0-alpha.21", + "resolved": "https://registry.npmjs.org/@vuelidate/validators/-/validators-2.0.0-alpha.21.tgz", + "integrity": "sha512-Ch+dW2hSWxAv+DcCEbpMVB58rylrCRxrGQMvL1gJKtq2SdrIrvw+IfgGL9VtxLx8U8gqlDiqy7M4Ycu59rUSnA==", + "requires": { + "vue-demi": "^0.11.3" + } + }, + "@vueuse/core": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-6.0.0.tgz", + "integrity": "sha512-PuBfNo/Zv+NkLcZaYWBA1WjqxQhTDC0DMQpoAIJdo/GFul/1SpBbONhUho2zqtOmq8vyGuK200wNFvyA4YUAMg==", + "requires": { + "@vueuse/shared": "6.0.0", + "vue-demi": "*" + } + }, + "@vueuse/shared": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-6.0.0.tgz", + "integrity": "sha512-PLjjqL8bxI5q86qk/ifXy572nfQE3rJc1RMem+dKcGayaagMnC4kXHEt64V98DVielSwr2FuYaeFodi4KJrvdg==", + "requires": { + "vue-demi": "*" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "autoprefixer": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.1.tgz", + "integrity": "sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001243", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + } + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-scroll-lock": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz", + "integrity": "sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.2.tgz", + "integrity": "sha512-jSDZyqJmkKMEMi7SZAgX5UltFdR5NAO43vY0AwTpu4X3sGH7GLLQ83KiUomgrnvZRCeW0yPPnKqnxPqQOER9zQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001261", + "electron-to-chromium": "^1.3.854", + "escalade": "^3.1.1", + "nanocolors": "^0.2.12", + "node-releases": "^1.1.76" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001264", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001264.tgz", + "integrity": "sha512-Ftfqqfcs/ePiUmyaySsQ4PUsdcYyXG2rfoBVsk3iY1ahHaJEw65vfb7Suzqm+cEkwwPIv/XWkg27iCpRavH4zA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "requires": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "requires": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "requires": { + "color-name": "^1.0.0" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "clipboard": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", + "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + }, + "dependencies": { + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==" + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "consolidate": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz", + "integrity": "sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==", + "dev": true, + "requires": { + "bluebird": "^3.7.2" + } + }, + "core-js": { + "version": "3.18.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.1.tgz", + "integrity": "sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA==" + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csstype": { + "version": "2.6.18", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.18.tgz", + "integrity": "sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ==" + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.857", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.857.tgz", + "integrity": "sha512-a5kIr2lajm4bJ5E4D3fp8Y/BRB0Dx2VOcCRE5Gtb679mXIME/OFhWler8Gy2ksrf8gFX+EFCSIGA33FB3gqYpg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + } + } + }, + "esbuild": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true + }, + "eslint-plugin-vue": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.16.0.tgz", + "integrity": "sha512-0E2dVvVC7I2Xm1HXyx+ZwPj9CNX4NJjs4K4r+GVsHWyt5Pew3JLD4fI7A91b2jeL0TXE7LlszrwLSTJU9eqehw==", + "dev": true, + "requires": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^6.3.0", + "vue-eslint-parser": "^7.10.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatpickr": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.9.tgz", + "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==" + }, + "flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "requires": { + "delegate": "^3.1.2" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "guid": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/guid/-/guid-0.0.12.tgz", + "integrity": "sha1-kTfFKxhffeEkkLm+vMFmC5Al/gw=" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", + "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "laravel-vite": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/laravel-vite/-/laravel-vite-0.0.7.tgz", + "integrity": "sha512-ko4Ux1bBXBnGoIFAvhmXuTwZ39RIIzdX2u7cXorfFlNLmSLvB0B5w0zZuykZmWdIK4GrGohLmkAtEYS/5pR08Q==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "deepmerge": "^4.2.2", + "dotenv": "^8.2.0", + "execa": "^5.0.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", + "dev": true + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.topath": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", + "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "maska": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/maska/-/maska-1.4.6.tgz", + "integrity": "sha512-dEZcoGp5Wufm2PZ4qZD81WKNaWO6XBIiHLazt5xShl4lydlH/5ZoLGEyJfzBaREXbAnsE5THShLyJKIaIeIuvA==" + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-svg-data-uri": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.3.3.tgz", + "integrity": "sha512-+fA2oRcR1dJI/7ITmeQJDrYWks0wodlOz0pAEhKYJ2IVc1z0AnwJUsKY2fzFmPAM3Jo9J0rBx8JAA9QQSJ5PuA==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "modern-normalize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "dev": true + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanocolors": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.12.tgz", + "integrity": "sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug==", + "dev": true + }, + "nanoid": { + "version": "3.1.28", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.28.tgz", + "integrity": "sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "requires": { + "lodash": "^4.17.21" + } + }, + "node-releases": { + "version": "1.1.77", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", + "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "orderedmap": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.1.tgz", + "integrity": "sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pinia": { + "version": "2.0.0-rc.6", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.0-rc.6.tgz", + "integrity": "sha512-IqArmLmWJB5wZzELZfFF42bMaulo6cjMvL1wgUjWfmzaGCt1HYOAXN86s6HrdAueeEWj9Ov6lNNOHB1DFQxthw==", + "requires": { + "@vue/devtools-api": "^6.0.0-beta.15", + "vue-demi": "*" + } + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, + "postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, + "postcss-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", + "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1", + "postcss": "^8.1.6" + } + }, + "postcss-load-config": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz", + "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==", + "dev": true, + "requires": { + "import-cwd": "^3.0.0", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "postcss-modules": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", + "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", + "dev": true, + "requires": { + "generic-names": "^2.0.1", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-nested": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz", + "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prosemirror-commands": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.1.10.tgz", + "integrity": "sha512-IWyBBXNAd44RM6NnBPljwq+/CM2oYCQJkF+YhKEAZNwzW0uFdGf4qComhjbKZzqFdu6Iub2ZhNsXgwPibA0lCQ==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-dropcursor": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.3.5.tgz", + "integrity": "sha512-tNUwcF2lPAkwKBZPZRtbxpwljnODRNZ3eiYloN1DSUqDjMT1nBZm0nejaEMS1TvNQ+3amibUSAiV4hX+jpASFA==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "prosemirror-gapcursor": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.0.tgz", + "integrity": "sha512-yCLy5+0rVqLir/KcHFathQj4Rf8aRHi80FmEfKtM0JmyzvwdomslLzDZ/pX4oFhFKDgjl/WBBBFNqDyNifWg7g==", + "requires": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "prosemirror-history": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.2.0.tgz", + "integrity": "sha512-B9v9xtf4fYbKxQwIr+3wtTDNLDZcmMMmGiI3TAPShnUzvo+Rmv1GiUrsQChY1meetHl7rhML2cppF3FTs7f7UQ==", + "requires": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "prosemirror-inputrules": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.1.3.tgz", + "integrity": "sha512-ZaHCLyBtvbyIHv0f5p6boQTIJjlD6o2NPZiEaZWT2DA+j591zS29QQEMT4lBqwcLW3qRSf7ZvoKNbf05YrsStw==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-keymap": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.4.tgz", + "integrity": "sha512-Al8cVUOnDFL4gcI5IDlG6xbZ0aOD/i3B17VT+1JbHWDguCgt/lBHVTHUBcKvvbSg6+q/W4Nj1Fu6bwZSca3xjg==", + "requires": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "prosemirror-model": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.14.3.tgz", + "integrity": "sha512-yzZlBaSxfUPIIP6U5Edh5zKxJPZ5f7bwZRhiCuH3UYkWhj+P3d8swHsbuAMOu/iDatDc5J/Qs5Mb3++mZf+CvQ==", + "requires": { + "orderedmap": "^1.1.0" + } + }, + "prosemirror-schema-list": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.6.tgz", + "integrity": "sha512-aFGEdaCWmJzouZ8DwedmvSsL50JpRkqhQ6tcpThwJONVVmCgI36LJHtoQ4VGZbusMavaBhXXr33zyD2IVsTlkw==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-state": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.4.tgz", + "integrity": "sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-transform": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.3.3.tgz", + "integrity": "sha512-9NLVXy1Sfa2G6qPqhWMkEvwQQMTw7OyTqOZbJaGQWsCeH3hH5Cw+c5eNaLM1Uu75EyKLsEZhJ93XpHJBa6RX8A==", + "requires": { + "prosemirror-model": "^1.0.0" + } + }, + "prosemirror-view": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.20.1.tgz", + "integrity": "sha512-djWORhy3a706mUH4A2dgEEV0IPZqQd1tFyz/ZVHJNoqhSgq82FwG6dq7uqHeUB2KdVSNfI2yc3rwfqlC/ll2pA==", + "requires": { + "prosemirror-model": "^1.14.3", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "purgecss": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", + "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", + "dev": true, + "requires": { + "commander": "^6.0.0", + "glob": "^7.0.0", + "postcss": "^8.2.1", + "postcss-selector-parser": "^6.0.2" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "sass": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.38.0.tgz", + "integrity": "sha512-WBccZeMigAGKoI+NgD7Adh0ab1HUq+6BmyBUEaGxtErbUtWUevEbdgo5EZiJQofLUGcKtlNaO2IdN73AHEua5g==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0" + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + } + } + }, + "sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "tailwind-scrollbar": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tailwind-scrollbar/-/tailwind-scrollbar-1.3.1.tgz", + "integrity": "sha512-FeYuLxLtCRMO4PmjPJCzm5wQouFro2BInZXKPxqg54DR/55NAHoS8uNYWMiRG5l6qsLkWBfVEM34gq2XAQUwVg==", + "dev": true, + "requires": { + "tailwindcss": ">1.9.6" + }, + "dependencies": { + "color": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", + "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", + "dev": true, + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "tailwindcss": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.16.tgz", + "integrity": "sha512-EireCtpQyyJ4Xz8NYzHafBoy4baCOO96flM0+HgtsFcIQ9KFy/YBK3GEtlnD+rXen0e4xm8t3WiUcKBJmN6yjg==", + "dev": true, + "requires": { + "arg": "^5.0.1", + "bytes": "^3.0.0", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "color": "^4.0.1", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.1", + "html-tags": "^3.1.0", + "is-color-stop": "^1.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.11.0", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^3.0.3", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", + "quick-lru": "^5.1.1", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" + } + } + } + }, + "tailwindcss": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.7.tgz", + "integrity": "sha512-jv35rugP5j8PpzbXnsria7ZAry7Evh0KtQ4MZqNd+PhF+oIKPwJTVwe/rmfRx9cZw3W7iPZyzBmeoAoNwfJ1yg==", + "dev": true, + "requires": { + "arg": "^5.0.0", + "bytes": "^3.0.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.2", + "color": "^3.2.0", + "cosmiconfig": "^7.0.0", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.0", + "html-tags": "^3.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.8.1", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^3.0.3", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.5", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", + "quick-lru": "^5.1.1", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "tippy.js": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.2.tgz", + "integrity": "sha512-35XVQI7Zl/jHZ51+8eHu/vVRXBjWYGobPm5G9FxOchj4r5dWhghKGS0nm0ARUKZTF96V7pPn7EbXS191NTwldw==", + "requires": { + "@popperjs/core": "^2.9.0" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v-money3": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/v-money3/-/v-money3-3.16.1.tgz", + "integrity": "sha512-U0GjmdybvEwfxCpZiTUbKugSglJbX6wxlyMeg0YJdLTAKlnjMRDph3hpNJlTlg5Gs8MQRpDVdaLysBjV749HLg==" + }, + "v-tooltip": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.1.3.tgz", + "integrity": "sha512-xXngyxLQTOx/yUEy50thb8te7Qo4XU6h4LZB6cvEfVd9mnysUxLEoYwGWDdqR+l69liKsy3IPkdYff3J1gAJ5w==", + "requires": { + "@babel/runtime": "^7.13.10", + "lodash": "^4.17.21", + "popper.js": "^1.16.1", + "vue-resize": "^1.0.1" + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vite": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.5.0.tgz", + "integrity": "sha512-Dn4B+g54PJsMG5WCc4QeFy1ygMXRdTtFrUPegqfk4+vzVQcbF/DqqmI/1bxezArzbujBJg/67QeT5wz8edfJVQ==", + "dev": true, + "requires": { + "esbuild": "^0.12.17", + "fsevents": "~2.3.2", + "postcss": "^8.3.6", + "resolve": "^1.20.0", + "rollup": "^2.38.5" + } + }, + "vue": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.4.tgz", + "integrity": "sha512-rNCFmoewm8IwmTK0nj3ysKq53iRpNEFKoBJ4inar6tIh7Oj7juubS39RI8UI+VE7x+Cs2z6PBsadtZu7z2qppg==", + "requires": { + "@vue/compiler-dom": "3.2.4", + "@vue/runtime-dom": "3.2.4", + "@vue/shared": "3.2.4" + } + }, + "vue-demi": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.11.4.tgz", + "integrity": "sha512-/3xFwzSykLW2HiiLie43a+FFgNOcokbBJ+fzvFXd0r2T8MYohqvphUyDQ8lbAwzQ3Dlcrb1c9ykifGkhSIAk6A==" + }, + "vue-eslint-parser": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", + "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^6.3.0" + }, + "dependencies": { + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + } + } + }, + "vue-flatpickr-component": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/vue-flatpickr-component/-/vue-flatpickr-component-9.0.4.tgz", + "integrity": "sha512-E8XfzLhrPsQBtZluWYEn3m21VHn7PArYnel3QPYL3auBrVMc07WaK6b20e04OK8LUCq9V+OKNZe4MoI0znY/Hw==", + "requires": { + "flatpickr": "^4.6.9" + } + }, + "vue-i18n": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.1.7.tgz", + "integrity": "sha512-ujuuDanoHqtEd4GejWrbG/fXE9nrP51ElsEGxp0WBHfv+/ki0/wyUqkO+4fLikki2obGtXdviTPH0VNpas5K6g==", + "requires": { + "@intlify/core-base": "9.1.7", + "@intlify/shared": "9.1.7", + "@intlify/vue-devtools": "9.1.7", + "@vue/devtools-api": "^6.0.0-beta.7" + } + }, + "vue-resize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-1.0.1.tgz", + "integrity": "sha512-z5M7lJs0QluJnaoMFTIeGx6dIkYxOwHThlZDeQnWZBizKblb99GSejPnK37ZbNE/rVwDcYcHY+Io+AxdpY952w==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "vue-router": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.11.tgz", + "integrity": "sha512-sha6I8fx9HWtvTrFZfxZkiQQBpqSeT+UCwauYjkdOQYRvwsGwimlQQE2ayqUwuuXGzquFpCPoXzYKWlzL4OuXg==", + "requires": { + "@vue/devtools-api": "^6.0.0-beta.14" + } + }, + "vue-types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vue-types/-/vue-types-4.1.0.tgz", + "integrity": "sha512-oPAeKKx5vY5Q8c7lMQPQyrBIbmWQGael5XEHqO1f+Y3V/RUZNuISz7KxI4woGjh79Vy/gDDaPX9j9zKYpaaA2g==", + "requires": { + "is-plain-object": "5.0.0" + } + }, + "vue3-colorpicker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vue3-colorpicker/-/vue3-colorpicker-1.0.8.tgz", + "integrity": "sha512-QwAk8Ttu4aoZdIuBETB5Mn6ZE8/95cf7HeLjnEVF83ABqUYTbH7sZQww/AoNWvJhq05txFqiuFGXaS47aPpZdQ==", + "requires": { + "@aesoper/normal-utils": "^0.1.5", + "@popperjs/core": "^2.10.1", + "@vueuse/core": "^6.5.3", + "lodash-es": "^4.17.21", + "tinycolor2": "^1.4.2", + "vue": "^3.2.6", + "vue3-normal-directive": "^0.1.4", + "vue3-normal-library": "^0.1.6", + "vue3-storage": "^0.1.11" + }, + "dependencies": { + "@popperjs/core": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz", + "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==" + }, + "@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.19.tgz", + "integrity": "sha512-WzQoE8rfkFjPtIioc7SSgTsnz9g2oG61DU8KHnzPrRS7fW/lji6H2uCYJfp4Z6kZE8GjnHc1Ljwl3/gxDes0cw==", + "requires": { + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.19.tgz", + "integrity": "sha512-pLlbgkO1UHTO02MSpa/sFOXUwIDxSMiKZ1ozE5n71CY4DM+YmI+G3gT/ZHZ46WBId7f3VTF/D8pGwMygcQbrQA==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.19", + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-ssr": "3.2.19", + "@vue/ref-transform": "3.2.19", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/reactivity": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.19.tgz", + "integrity": "sha512-FtachoYs2SnyrWup5UikP54xDX6ZJ1s5VgHcJp4rkGoutU3Ry61jhs+nCX7J64zjX992Mh9gGUC0LqTs8q9vCA==", + "requires": { + "@vue/shared": "3.2.19" + } + }, + "@vue/runtime-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.19.tgz", + "integrity": "sha512-qArZSWKxWsgKfxk9BelZ32nY0MZ31CAW2kUUyVJyxh4cTfHaXGbjiQB5JgsvKc49ROMNffv9t3/qjasQqAH+RQ==", + "requires": { + "@vue/reactivity": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "@vue/runtime-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.19.tgz", + "integrity": "sha512-hIRboxXwafeHhbZEkZYNV0MiJXPNf4fP0X6hM2TJb0vssz8BKhD9cF92BkRgZztTQevecbhk0gu4uAPJ3dxL9A==", + "requires": { + "@vue/runtime-core": "3.2.19", + "@vue/shared": "3.2.19", + "csstype": "^2.6.8" + } + }, + "@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + }, + "@vueuse/core": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-6.5.3.tgz", + "integrity": "sha512-o3CTu4nEqs371sDY5qLBX0r4QOm6GVpm3ApQc2Y+p8OMI2rRGartQo8xRykpUfsyq602A+SVtm/wxIWBkD/KCQ==", + "requires": { + "@vueuse/shared": "6.5.3", + "vue-demi": "*" + } + }, + "@vueuse/shared": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-6.5.3.tgz", + "integrity": "sha512-ChOKu3mECyZeqGJ/gHVm0CaHoZK5/TwNZr1ZM/aqH+RaRNQvC1qkLf1/8PBugzN3yRgC3BtZ/M1kLpGe/BFylw==", + "requires": { + "vue-demi": "*" + } + }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "vue": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.19.tgz", + "integrity": "sha512-6KAMdIfAtlK+qohTIUE4urwAv4A3YRuo8uAbByApUmiB0CziGAAPs6qVugN6oHPia8YIafHB/37K0O6KZ7sGmA==", + "requires": { + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-sfc": "3.2.19", + "@vue/runtime-dom": "3.2.19", + "@vue/server-renderer": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "vue3-storage": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/vue3-storage/-/vue3-storage-0.1.11.tgz", + "integrity": "sha512-4pLQUMeGFduP2IaFage8Y/9AtUljKkm3z9N4ko30kTcKDwyr7JXOAsNFjYqw58SWNNLQdXqaGGAxZFVnk/JfUg==", + "requires": { + "core-js": "^3.6.5", + "cross-env": "^7.0.3", + "vue": "^3.0.0", + "vue-class-component": "^8.0.0-0", + "vue-router": "^4.0.0-0" + }, + "dependencies": { + "vue-class-component": { + "version": "8.0.0-rc.1", + "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-8.0.0-rc.1.tgz", + "integrity": "sha512-w1nMzsT/UdbDAXKqhwTmSoyuJzUXKrxLE77PCFVuC6syr8acdFDAq116xgvZh9UCuV0h+rlCtxXolr3Hi3HyPQ==" + } + } + } + } + }, + "vue3-normal-directive": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/vue3-normal-directive/-/vue3-normal-directive-0.1.4.tgz", + "integrity": "sha512-aO1xGJqdgb0a6LkMn1Q5GAkjISL6fCdhedMegFBLNKVlMDEi3YY+Vx9SaNEuLmQHCuQUY91m0TS17S/WSrn90g==", + "requires": { + "body-scroll-lock": "^3.1.5", + "clipboard": "^2.0.6", + "lodash-es": "^4.17.21", + "vue": "^3.2.6" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.19.tgz", + "integrity": "sha512-WzQoE8rfkFjPtIioc7SSgTsnz9g2oG61DU8KHnzPrRS7fW/lji6H2uCYJfp4Z6kZE8GjnHc1Ljwl3/gxDes0cw==", + "requires": { + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.19.tgz", + "integrity": "sha512-pLlbgkO1UHTO02MSpa/sFOXUwIDxSMiKZ1ozE5n71CY4DM+YmI+G3gT/ZHZ46WBId7f3VTF/D8pGwMygcQbrQA==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.19", + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-ssr": "3.2.19", + "@vue/ref-transform": "3.2.19", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/reactivity": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.19.tgz", + "integrity": "sha512-FtachoYs2SnyrWup5UikP54xDX6ZJ1s5VgHcJp4rkGoutU3Ry61jhs+nCX7J64zjX992Mh9gGUC0LqTs8q9vCA==", + "requires": { + "@vue/shared": "3.2.19" + } + }, + "@vue/runtime-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.19.tgz", + "integrity": "sha512-qArZSWKxWsgKfxk9BelZ32nY0MZ31CAW2kUUyVJyxh4cTfHaXGbjiQB5JgsvKc49ROMNffv9t3/qjasQqAH+RQ==", + "requires": { + "@vue/reactivity": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "@vue/runtime-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.19.tgz", + "integrity": "sha512-hIRboxXwafeHhbZEkZYNV0MiJXPNf4fP0X6hM2TJb0vssz8BKhD9cF92BkRgZztTQevecbhk0gu4uAPJ3dxL9A==", + "requires": { + "@vue/runtime-core": "3.2.19", + "@vue/shared": "3.2.19", + "csstype": "^2.6.8" + } + }, + "@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + }, + "vue": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.19.tgz", + "integrity": "sha512-6KAMdIfAtlK+qohTIUE4urwAv4A3YRuo8uAbByApUmiB0CziGAAPs6qVugN6oHPia8YIafHB/37K0O6KZ7sGmA==", + "requires": { + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-sfc": "3.2.19", + "@vue/runtime-dom": "3.2.19", + "@vue/server-renderer": "3.2.19", + "@vue/shared": "3.2.19" + } + } + } + }, + "vue3-normal-library": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/vue3-normal-library/-/vue3-normal-library-0.1.6.tgz", + "integrity": "sha512-TSqCeD092ETnjqamNKtXencLnG4a+NVWFZgalmyPtFH1FHvpxLP7eptT8krOL2sZVspficic8DghfDakw3tKRQ==", + "requires": { + "lodash-es": "^4.17.21", + "raf": "^3.4.1", + "vue": "^3.2.6", + "vue-types": "^4.1.0" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.19.tgz", + "integrity": "sha512-8dOPX0YOtaXol0Zf2cfLQ4NU/yHYl2H7DCKsLEZ7gdvPK6ZSEwGLJ7IdghhY2YEshEpC5RB9QKdC5I07z8Dtjg==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.19.tgz", + "integrity": "sha512-WzQoE8rfkFjPtIioc7SSgTsnz9g2oG61DU8KHnzPrRS7fW/lji6H2uCYJfp4Z6kZE8GjnHc1Ljwl3/gxDes0cw==", + "requires": { + "@vue/compiler-core": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.19.tgz", + "integrity": "sha512-pLlbgkO1UHTO02MSpa/sFOXUwIDxSMiKZ1ozE5n71CY4DM+YmI+G3gT/ZHZ46WBId7f3VTF/D8pGwMygcQbrQA==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.19", + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-ssr": "3.2.19", + "@vue/ref-transform": "3.2.19", + "@vue/shared": "3.2.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/reactivity": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.19.tgz", + "integrity": "sha512-FtachoYs2SnyrWup5UikP54xDX6ZJ1s5VgHcJp4rkGoutU3Ry61jhs+nCX7J64zjX992Mh9gGUC0LqTs8q9vCA==", + "requires": { + "@vue/shared": "3.2.19" + } + }, + "@vue/runtime-core": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.19.tgz", + "integrity": "sha512-qArZSWKxWsgKfxk9BelZ32nY0MZ31CAW2kUUyVJyxh4cTfHaXGbjiQB5JgsvKc49ROMNffv9t3/qjasQqAH+RQ==", + "requires": { + "@vue/reactivity": "3.2.19", + "@vue/shared": "3.2.19" + } + }, + "@vue/runtime-dom": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.19.tgz", + "integrity": "sha512-hIRboxXwafeHhbZEkZYNV0MiJXPNf4fP0X6hM2TJb0vssz8BKhD9cF92BkRgZztTQevecbhk0gu4uAPJ3dxL9A==", + "requires": { + "@vue/runtime-core": "3.2.19", + "@vue/shared": "3.2.19", + "csstype": "^2.6.8" + } + }, + "@vue/shared": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.19.tgz", + "integrity": "sha512-Knqhx7WieLdVgwCAZgTVrDCXZ50uItuecLh9JdLC8O+a5ayaSyIQYveUK3hCRNC7ws5zalHmZwfdLMGaS8r4Ew==" + }, + "vue": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.19.tgz", + "integrity": "sha512-6KAMdIfAtlK+qohTIUE4urwAv4A3YRuo8uAbByApUmiB0CziGAAPs6qVugN6oHPia8YIafHB/37K0O6KZ7sGmA==", + "requires": { + "@vue/compiler-dom": "3.2.19", + "@vue/compiler-sfc": "3.2.19", + "@vue/runtime-dom": "3.2.19", + "@vue/server-renderer": "3.2.19", + "@vue/shared": "3.2.19" + } + } + } + }, + "vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "requires": { + "sortablejs": "1.14.0" + } + }, + "w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 72fb71e2c..e9682fb61 100644 --- a/package.json +++ b/package.json @@ -1,49 +1,56 @@ { - "private": true, - "scripts": { - "dev": "mix", - "watch": "mix watch", - "watch-poll": "mix watch -- --watch-options-poll=1000", - "hot": "mix watch --hot", - "production": "mix --production" - }, - "devDependencies": { - "babel-eslint": "^8.2.6", - "cross-env": "^5.1", - "eslint": "^4.19.1", - "eslint-config-prettier": "^6.15.0", - "eslint-loader": "^3.0.4", - "eslint-plugin-prettier": "^3.3.0", - "eslint-plugin-vue": "^4.7.1", - "laravel-mix": "^6.0.6", - "postcss": "^8.1", - "prettier": "^2.2.1", - "resolve-url-loader": "3.1.0", - "sass": "^1.29.0", - "sass-loader": "^8.0.2", - "tailwindcss-plugins": "^0.3.0", - "vue-template-compiler": "^2.6.10" - }, - "dependencies": { - "@bytefury/spacewind": "^0.5.3", - "@vue-hero-icons/outline": "^1.6.3", - "@vue-hero-icons/solid": "^1.6.3", - "axios": "^0.21", - "chart.js": "^2.7.3", - "guid": "0.0.12", - "lodash": "^4.17.13", - "moment": "^2.29.1", - "sweet-modal-vue": "^2.0.0", - "tailwindcss": "^2.0.1", - "v-tooltip": "^2.0.2", - "vue": "^2.6.10", - "vue-i18n": "^8.22.0", - "vue-loader": "^15.9.3", - "vue-router": "2.7.0", - "vue-sweetalert2": "^4.2.1", - "vue2-transitions": "^0.3.0", - "vuedraggable": "^2.24.2", - "vuelidate": "^0.6.2", - "vuex": "^3.0.1" - } + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build", + "serve": "vite preview", + "test": "eslint ./resources/scripts --ext .js,.vue" + }, + "devDependencies": { + "@rvxlab/tailwind-plugin-ios-full-height": "^1.0.0", + "@vitejs/plugin-vue": "^1.10.0", + "@vue/compiler-sfc": "^3.2.22", + "autoprefixer": "^10.2.5", + "cross-env": "^5.1", + "eslint": "^7.27.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-vue": "^7.0.0-beta.4", + "laravel-vite": "^0.0.7", + "postcss": "^8.2.13", + "prettier": "^2.3.0", + "sass": "^1.32.12", + "tailwind-scrollbar": "^1.3.1", + "tailwindcss": "^2.2.7", + "vite": "^2.6.1" + }, + "dependencies": { + "@headlessui/vue": "^1.4.0", + "@heroicons/vue": "^1.0.1", + "@popperjs/core": "^2.9.2", + "@tailwindcss/forms": "^0.3.3", + "@tiptap/core": "^2.0.0-beta.85", + "@tiptap/starter-kit": "^2.0.0-beta.81", + "@tiptap/vue-3": "^2.0.0-beta.38", + "@vuelidate/components": "^1.1.12", + "@vuelidate/core": "^2.0.0-alpha.32", + "@vuelidate/validators": "^2.0.0-alpha.25", + "@vueuse/core": "^6.0.0", + "axios": "^0.19", + "chart.js": "^2.7.3", + "guid": "0.0.12", + "lodash": "^4.17.13", + "maska": "^1.4.6", + "mini-svg-data-uri": "^1.3.3", + "moment": "^2.29.1", + "pinia": "^2.0.4", + "postcss-inset": "^1.0.0", + "v-money3": "^3.13.5", + "v-tooltip": "^4.0.0-alpha.1", + "vue": "^3.2.0-beta.5", + "vue-flatpickr-component": "^9.0.3", + "vue-i18n": "^9.1.7", + "vue-router": "^4.0.8", + "vue3-colorpicker": "^1.0.5", + "vuedraggable": "^4.1.0" + } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 000000000..18f9e574d --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,8 @@ +// postcss.config.js +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + 'postcss-inset': {} + }, +} diff --git a/public/.htaccess b/public/.htaccess index e20b89237..3aec5e27e 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -1,20 +1,21 @@ - Options -MultiViews + Options -MultiViews -Indexes RewriteEngine On + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^(.*)/$ /$1 [L,R=301] + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] - # Handle Front Controller... + # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] - - # Handle Authorization Header - RewriteCond %{HTTP:Authorization} . - RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] - \ No newline at end of file + diff --git a/public/assets/css/crater.css b/public/assets/css/crater.css deleted file mode 100644 index 322b82b6f..000000000 --- a/public/assets/css/crater.css +++ /dev/null @@ -1 +0,0 @@ -/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */:root{-moz-tab-size:4;-o-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=submit],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid #edf2f7}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#cbd5e0}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#cbd5e0}input::placeholder,textarea::placeholder{color:#cbd5e0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}.sw-h1{font-size:35px}.sw-h1,.sw-h2{font-weight:600;color:#040405}.sw-h2{font-size:28px}.sw-h3{font-size:24.5px}.sw-h3,.sw-h4{font-weight:600;color:#040405}.sw-h4{font-size:21px}.sw-h5{font-size:17.5px}.sw-h5,.sw-h6{font-weight:600;color:#040405}.sw-h6{font-size:14px}.sw-page-title{font-weight:600;color:#040405;font-size:24.5px}.sw-section-title{font-weight:500;color:#040405;font-size:17.5px}.h1,.h2,.h3,.h4,.h5,.h6{font-family:Poppins;font-family:sans-serif}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1440px){.container{max-width:1440px}}@media (min-width:1536px){.container{max-width:1536px}}.dropzone .dz-message{text-align:center;margin:2em 0}.dropzone .dz-preview{min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-remove{top:-24px;right:-24px}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid #cbd5e0;background-color:#cbd5e0}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-success-mark{opacity:0}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{z-index:500;top:50%;left:50%;margin-left:-27px;margin-top:-27px}.dropzone .dz-preview:not(.dz-processing) .dz-progress{-webkit-animation:pulse 6s ease infinite;animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{display:none;z-index:1000;left:50%;top:50%;margin-top:-8px;margin-left:-40px}.dropzone .dz-preview .dz-progress .dz-upload{transition:width .3s ease-in-out}.dropzone .dz-preview .dz-error-message{z-index:1000;top:130px;left:-10px}.dropzone .dz-preview.dz-image-preview .dz-details{transition:opacity .2s linear}.dropzone .dz-preview.dz-success .dz-success-mark{opacity:1;-webkit-animation:passing-through 3s cubic-bezier(.77,0,.175,1);animation:passing-through 3s cubic-bezier(.77,0,.175,1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;-webkit-animation:slide-in 3s cubic-bezier(.77,0,.175,1);animation:slide-in 3s cubic-bezier(.77,0,.175,1)}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview.dz-processing .dz-progress{display:block;opacity:1;transition:all .2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;transition:opacity .4s ease-in}.dropzone .dz-preview.dz-complete .dz-success-mark{opacity:0;transition:all .2s linear}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:.5}.switch[type=checkbox]{height:0;width:0;visibility:hidden}.switch-label{text-indent:-9999px;width:35px;border-radius:16px}.switch-label .switch-circle{position:absolute;top:-3px;left:0;width:20px;height:20px;background:#a0aec0;border-radius:15px;transition:.3s}.switch-label:active .switch-circle{width:20px}.switch:checked+.switch-label{background:#bcb9ef}.switch:checked+.switch-label .switch-circle{left:100%;transform:translateX(-100%);background:#5851d8}.checkbox input[type=checkbox]{-webkit-print-color-adjust:exact;color-adjust:exact;background-origin:border-box}.checkbox input[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}.radio input[type=radio]{-webkit-print-color-adjust:exact;color-adjust:exact;background-origin:border-box}.radio input[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}.flatpickr-calendar.open{z-index:40!important}.base-date-picker-input:focus{box-shadow:none}.flatpickr-day.endRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{box-shadow:none;background-color:#5851d8;boader-color:#5851d8;color:#fff}.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day:focus,.flatpickr-day:hover{cursor:pointer;outline:0;background:#e2e8f0;border-color:#e2e8f0}.header-editior .editor-menu-bar{margin-left:.6px;margin-right:0}.editor__content .ProseMirror{border-radius:5px;min-height:200px;border:1px solid #cbd5e0}.editor__content .ProseMirror.ProseMirror-focused{border:1px solid #5851d8;outline:none}.editor__content pre{padding:.7rem 1rem;border-radius:5px;font-size:.8rem;overflow-x:auto;background-color:#2d3748;color:#fff}.editor__content pre code{display:block}.editor__content *{caret-color:currentColor}.editor__content ul{list-style-type:disc!important}.editor__content ol,.editor__content ul{display:block!important;-webkit-margin-before: 1em!important;margin-block-start: 1em!important;-webkit-margin-after:1em!important;margin-block-end:1em!important;-webkit-margin-start:0!important;margin-inline-start:0!important;-webkit-margin-end:0!important;margin-inline-end:0!important;-webkit-padding-start:40px!important;padding-inline-start:40px!important}.editor__content ol{list-style-type:decimal}.editor__content blockquote{border-left-width:3px!important;border-left-style:solid!important;border-left-color:#cbd5e0;color:#2d3748;padding-left:.8rem!important;font-style:italic!important}.editor__content h1{display:block;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0;font-weight:700;font-size:2em;-webkit-margin-before:.67em;margin-block-start:.67em;-webkit-margin-after:.67em;margin-block-end:.67em}.editor__content h2{display:block;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0;font-weight:700;font-size:1.5em;-webkit-margin-before:.83em;margin-block-start:.83em;-webkit-margin-after: .83em;margin-block-end: .83em}.editor__content h3{display:block;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0;font-weight:700;font-size:1.17em;-webkit-margin-before:1em;margin-block-start:1em;-webkit-margin-after:1em;margin-block-end:1em}.flat-table tr:last-child td{border:none!important}.table-component__filter{align-self:flex-end;position:relative}.table-component__filter__field{padding:.15em 1.25em .15em .75em;border:1px solid #f7fafc;font-size:15px;border-radius:3px}.table-component__filter__field:focus{outline:0;border-color:#5851d8}.table-component__table{border-spacing:0 15px}.asc-direction,.desc-direction{display:none}.table-component__th--sort-asc .asc-direction,.table-component__th--sort-desc .desc-direction{display:inline}.table-component .pagination .page-item.active .page-link{color:#fff!important}.table-component .pagination a i{padding:.5rem .75rem;margin-left:-1px}table.full-width{width:100%}.selectall{cursor:pointer;z-index:10}.table-component td>span:first-child{background:#ebf1fa;color:#5851d8;display:none;font-size:10px;font-weight:700;padding:5px;left:0;position:absolute;text-transform:uppercase;top:0}.select-all-label{display:none!important}@media (max-width:768px){.select-all-label{display:inline!important;color:#353182;cursor:pointer}.selectall{top:20px}.table-component .dropdown-group{position:absolute;visibility:visible;top:15px;right:10px}.table-component thead{left:-9999px;position:absolute;visibility:hidden}.table-component tr{display:flex;flex-direction:row;flex-wrap:wrap;margin-top:50px;position:relative}.table-component td{margin:0 -1px -1px 0;padding-top:40px!important;position:relative;width:50%;left:0;border:1px solid #f7fafc}.table-component td:not(:first-child){text-align:center!important}.table-component td:first-child{display:flex;justify-content:space-between;flex:1 100%;height:50px;padding-top:25px!important;align-items:center;border-bottom-left-radius:0!important;border-top-left-radius:5px!important;border-top-right-radius:5px!important}.table-component td:last-child{position:unset;visibility:hidden;height:0!important;padding:0!important}.table-component td:nth-last-child(3){border-bottom-left-radius:5px!important}.table-component td:nth-last-child(2){border-bottom-right-radius:5px!important}.table-component td>span:first-child{display:block}.table-component .dropdown-container{right:0;left:120px}}.wizard .indicator-line{border-width:5px;width:530px}.wizard .center{margin-top:-11px;width:105%}.wizard .steps{float:left;border-width:5px;height:25px;width:25px}@media (max-width:480px){.wizard .indicator-line{width:90%}}.multiselect .multiselect__option--highlight{background-color:#f7fafc;color:#040405;font-weight:400!important}.multiselect .multiselect__option--highlight.multiselect__option--selected{background-color:#eeeefb;color:#040405;cursor:text;font-weight:400!important}.multiselect .multiselect__option--highlight.multiselect__option--selected:after{background:#040405;color:#fff}.multiselect .multiselect__option--highlight:after{background:#040405;color:#fff}.multiselect .multiselect__option--selected{font-weight:400!important;background-color:#eeeefb}.multiselect.error{border:1px solid #fb7178;border-radius:5px}.multiselect__spinner{right:1px;top:1px}.multiselect__spinner-after,.multiselect__spinner-before{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px;z-index:5;width:16px;height:16px;border-radius:100%;border:2px solid transparent;border-top-color:#41b883;box-shadow:0 0 0 1px transparent}.multiselect__spinner-after{-webkit-animation:spinning 2.4s cubic-bezier(.51,.09,.21,.8);animation:spinning 2.4s cubic-bezier(.51,.09,.21,.8);-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.multiselect__spinner-before{-webkit-animation:spinning 2.4s cubic-bezier(.41,.26,.2,.62);animation:spinning 2.4s cubic-bezier(.41,.26,.2,.62);-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.multiselect__loading-leave-active{transition:opacity .4s ease-in-out;opacity:1;opacity:0}fieldset[disabled] .multiselect{pointer-events:none}.multiselect,.multiselect__input,.multiselect__single{font-family:inherit;touch-action:manipulation}.multiselect *{box-sizing:border-box}.multiselect:focus{border:1px solid #8a85e4}.multiselect--disabled{pointer-events:none;opacity:.6}.multiselect--active:not(.multiselect--above) .multiselect__current,.multiselect--active:not(.multiselect--above) .multiselect__input,.multiselect--active:not(.multiselect--above) .multiselect__tags{border-bottom-left-radius:0;border-bottom-right-radius:0}.multiselect--active .multiselect__select{transform:rotate(180deg)}.multiselect--above.multiselect--active .multiselect__current,.multiselect--above.multiselect--active .multiselect__input,.multiselect--above.multiselect--active .multiselect__tags{border-top-left-radius:0;border-top-right-radius:0}.multiselect__input,.multiselect__single{min-height:20px;transition:border .1s ease}.multiselect__input::-moz-placeholder{color:#cbd5e0}.multiselect__input:-ms-input-placeholder{color:#cbd5e0}.multiselect__input::placeholder{color:#cbd5e0}.multiselect__tag~.multiselect__input,.multiselect__tag~.multiselect__single{width:auto}.multiselect__input:hover,.multiselect__single:hover{border-color:#cfcfcf}.multiselect__input:focus,.multiselect__single:focus{border-color:#a8a8a8;outline:none}.multiselect__tag{text-overflow:ellipsis}.multiselect__tag-icon{font-style:normal}.multiselect__tag-icon-after{content:×;color:#fff;font-size:14px}.multiselect__placeholder{color:#cbd5e0;display:inline-block;margin-bottom:10px;padding-top:2px}.multiselect--active .multiselect__placeholder{display:none}.multiselect__content-wrapper{-webkit-overflow-scrolling:touch}.multiselect--above .multiselect__content-wrapper{bottom:100%;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom:none;border-top:1px solid #e8e8e8}.multiselect__content::webkit-scrollbar{display:none}.multiselect__option{min-height:40px}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(0.25rem*var(--tw-space-x-reverse));margin-left:calc(0.25rem*(1 - var(--tw-space-x-reverse)))}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.bg-transparent{background-color:transparent}.bg-black{--tw-bg-opacity:1;background-color:rgba(4,4,5,var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(247,250,252,var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(237,242,247,var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(226,232,240,var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(203,213,224,var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgba(160,174,192,var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgba(74,85,104,var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity:1;background-color:rgba(254,242,242,var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgba(254,226,226,var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity:1;background-color:rgba(254,202,202,var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgba(219,234,254,var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(238,238,251,var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(213,212,245,var(--tw-bg-opacity))}.bg-primary-400{--tw-bg-opacity:1;background-color:rgba(138,133,228,var(--tw-bg-opacity))}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(88,81,216,var(--tw-bg-opacity))}.bg-danger{--tw-bg-opacity:1;background-color:rgba(251,113,120,var(--tw-bg-opacity))}.bg-success{--tw-bg-opacity:1;background-color:rgba(0,201,156,var(--tw-bg-opacity))}.bg-warning{--tw-bg-opacity:1;background-color:rgba(243,175,78,var(--tw-bg-opacity))}.bg-info{--tw-bg-opacity:1;background-color:rgba(21,178,236,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(247,250,252,var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgba(237,242,247,var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgba(226,232,240,var(--tw-bg-opacity))}.hover\:bg-gray-400:hover{--tw-bg-opacity:1;background-color:rgba(203,213,224,var(--tw-bg-opacity))}.hover\:bg-primary-50:hover{--tw-bg-opacity:1;background-color:rgba(247,246,253,var(--tw-bg-opacity))}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(238,238,251,var(--tw-bg-opacity))}.hover\:bg-primary-200:hover{--tw-bg-opacity:1;background-color:rgba(213,212,245,var(--tw-bg-opacity))}.hover\:bg-primary-400:hover{--tw-bg-opacity:1;background-color:rgba(138,133,228,var(--tw-bg-opacity))}.hover\:bg-danger:hover{--tw-bg-opacity:1;background-color:rgba(251,113,120,var(--tw-bg-opacity))}.hover\:bg-success:hover{--tw-bg-opacity:1;background-color:rgba(0,201,156,var(--tw-bg-opacity))}.hover\:bg-warning:hover{--tw-bg-opacity:1;background-color:rgba(243,175,78,var(--tw-bg-opacity))}.hover\:bg-info:hover{--tw-bg-opacity:1;background-color:rgba(21,178,236,var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(90deg,var(--tw-gradient-stops))}.bg-gradient-to-b{background-image:linear-gradient(180deg,var(--tw-gradient-stops))}.from-gray-300{--tw-gradient-from:#e2e8f0;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to,rgba(226,232,240,0))}.from-red-500{--tw-gradient-from:#ef4444;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to,rgba(239,68,68,0))}.from-primary-500{--tw-gradient-from:#5851d8;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to,rgba(88,81,216,0))}.to-gray-400{--tw-gradient-to:#cbd5e0}.to-red-600{--tw-gradient-to:#dc2626}.to-primary-400{--tw-gradient-to:#8a85e4}.bg-opacity-25{--tw-bg-opacity:0.25}.hover\:bg-opacity-25:hover{--tw-bg-opacity:0.25}.hover\:bg-opacity-75:hover{--tw-bg-opacity:0.75}.bg-no-repeat{background-repeat:no-repeat}.bg-cover{background-size:cover}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-transparent{border-color:transparent}.border-gray-100{--tw-border-opacity:1;border-color:rgba(247,250,252,var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(237,242,247,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(226,232,240,var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgba(203,213,224,var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(138,133,228,var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(88,81,216,var(--tw-border-opacity))}.border-danger{--tw-border-opacity:1;border-color:rgba(251,113,120,var(--tw-border-opacity))}.border-success{--tw-border-opacity:1;border-color:rgba(0,201,156,var(--tw-border-opacity))}.border-warning{--tw-border-opacity:1;border-color:rgba(243,175,78,var(--tw-border-opacity))}.border-info{--tw-border-opacity:1;border-color:rgba(21,178,236,var(--tw-border-opacity))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgba(203,213,224,var(--tw-border-opacity))}.hover\:border-gray-500:hover{--tw-border-opacity:1;border-color:rgba(160,174,192,var(--tw-border-opacity))}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(188,185,239,var(--tw-border-opacity))}.focus\:border-transparent:focus{border-color:transparent}.focus\:border-primary-400:focus{--tw-border-opacity:1;border-color:rgba(138,133,228,var(--tw-border-opacity))}.focus\:border-primary-500:focus{--tw-border-opacity:1;border-color:rgba(88,81,216,var(--tw-border-opacity))}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.rounded-tr-sm{border-top-right-radius:.125rem}.rounded-br-sm{border-bottom-right-radius:.125rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.first\:rounded-tl-md:first-child{border-top-left-radius:.375rem}.first\:rounded-bl-md:first-child{border-bottom-left-radius:.375rem}.last\:rounded-tr-md:last-child{border-top-right-radius:.375rem}.last\:rounded-br-md:last-child{border-bottom-right-radius:.375rem}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-0{border-width:0}.border-2{border-width:2px}.border-4{border-width:4px}.border{border-width:1px}.border-t-0{border-top-width:0}.border-r-0{border-right-width:0}.border-t-2{border-top-width:2px}.border-b-2{border-bottom-width:2px}.border-b-3{border-bottom-width:3px}.border-l-3{border-left-width:3px}.border-r-4{border-right-width:4px}.border-b-4{border-bottom-width:4px}.border-l-4{border-left-width:4px}.border-t-8{border-top-width:8px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.last\:border-b-0:last-child{border-bottom-width:0}.focus\:border:focus{border-width:1px}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.cursor-auto{cursor:auto}.cursor-pointer{cursor:pointer}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.contents{display:contents}.hidden{display:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.content-center{align-content:center}.self-end{align-self:flex-end}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-shrink-0{flex-shrink:0}.float-right{float:right}.float-left{float:left}.float-none{float:none}.font-base{font-family:Poppins,sans-serif}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-black{font-weight:900}.h-0{height:0}.h-1{height:.25rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-20{height:5rem}.h-24{height:6rem}.h-32{height:8rem}.h-40{height:10rem}.h-130{height:560px}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem}.text-lg,.text-xl{line-height:1.75rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.list-inside{list-style-position:inside}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-4{margin:1rem}.m-6{margin:1.5rem}.my-0{margin-top:0;margin-bottom:0}.mx-0{margin-left:0;margin-right:0}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.mt-0{margin-top:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.mt-5{margin-top:1.25rem}.mr-5{margin-right:1.25rem}.mb-5{margin-bottom:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-8{margin-top:2rem}.mb-8{margin-bottom:2rem}.mt-10{margin-top:2.5rem}.mb-10{margin-bottom:2.5rem}.mt-12{margin-top:3rem}.mt-16{margin-top:4rem}.mb-32{margin-bottom:8rem}.ml-56{margin-left:14rem}.mt-2\.5{margin-top:.625rem}.-mr-1{margin-right:-.25rem}.-ml-1{margin-left:-.25rem}.-mt-2{margin-top:-.5rem}.-ml-2{margin-left:-.5rem}.-mt-3{margin-top:-.75rem}.first\:mt-6:first-child{margin-top:1.5rem}.max-h-60{max-height:240px}.max-h-130{max-height:560px}.max-w-sm{max-width:24rem}.max-w-lg{max-width:32rem}.max-w-full{max-width:100%}.min-h-0{min-height:0}.min-h-10{min-height:2.5rem}.min-h-screen{min-height:100vh}.min-w-0{min-width:0}.min-w-full{min-width:100%}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-100{opacity:1}.hover\:opacity-100:hover{opacity:1}.outline-none{outline:2px solid transparent;outline-offset:2px}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-y-scroll{overflow-y:scroll}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.py-0{padding-top:0;padding-bottom:0}.px-0{padding-left:0;padding-right:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-8{padding-left:2rem;padding-right:2rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.pr-0{padding-right:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pr-3{padding-right:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.pr-5{padding-right:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pt-8{padding-top:2rem}.pr-8{padding-right:2rem}.pl-8{padding-left:2rem}.pt-10{padding-top:2.5rem}.pr-10{padding-right:2.5rem}.pb-10{padding-bottom:2.5rem}.pl-10{padding-left:2.5rem}.pl-12{padding-left:3rem}.pt-16{padding-top:4rem}.pr-20{padding-right:5rem}.pl-20{padding-left:5rem}.pt-24{padding-top:6rem}.pb-32{padding-bottom:8rem}.pt-1\.5{padding-top:.375rem}.placeholder-gray-300::-moz-placeholder{--tw-placeholder-opacity:1;color:rgba(226,232,240,var(--tw-placeholder-opacity))}.placeholder-gray-300:-ms-input-placeholder{--tw-placeholder-opacity:1;color:rgba(226,232,240,var(--tw-placeholder-opacity))}.placeholder-gray-300::placeholder{--tw-placeholder-opacity:1;color:rgba(226,232,240,var(--tw-placeholder-opacity))}.placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity:1;color:rgba(203,213,224,var(--tw-placeholder-opacity))}.placeholder-gray-400:-ms-input-placeholder{--tw-placeholder-opacity:1;color:rgba(203,213,224,var(--tw-placeholder-opacity))}.placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgba(203,213,224,var(--tw-placeholder-opacity))}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgba(160,174,192,var(--tw-placeholder-opacity))}.placeholder-gray-500:-ms-input-placeholder{--tw-placeholder-opacity:1;color:rgba(160,174,192,var(--tw-placeholder-opacity))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgba(160,174,192,var(--tw-placeholder-opacity))}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-auto{top:auto}.top-1\/2{top:50%}.bottom-full{bottom:100%}.resize-none{resize:none}.resize{resize:both}*{--tw-shadow:0 0 transparent}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,0.1),0 10px 10px -5px rgba(0,0,0,0.04)}.shadow-inner,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,0.06)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}*{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent}.fill-current{fill:currentColor}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-current{color:currentColor}.text-black{--tw-text-opacity:1;color:rgba(4,4,5,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(247,250,252,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(226,232,240,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(203,213,224,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(160,174,192,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(113,128,150,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(74,85,104,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(45,55,72,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(26,32,44,var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgba(248,113,113,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgba(220,38,38,var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgba(185,28,28,var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgba(153,27,27,var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgba(52,211,153,var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgba(6,95,70,var(--tw-text-opacity))}.text-blue-400{--tw-text-opacity:1;color:rgba(96,165,250,var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgba(30,64,175,var(--tw-text-opacity))}.text-indigo-900{--tw-text-opacity:1;color:rgba(49,46,129,var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(138,133,228,var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(88,81,216,var(--tw-text-opacity))}.text-primary-800{--tw-text-opacity:1;color:rgba(40,36,97,var(--tw-text-opacity))}.text-danger{--tw-text-opacity:1;color:rgba(251,113,120,var(--tw-text-opacity))}.text-success{--tw-text-opacity:1;color:rgba(0,201,156,var(--tw-text-opacity))}.text-warning{--tw-text-opacity:1;color:rgba(243,175,78,var(--tw-text-opacity))}.text-info{--tw-text-opacity:1;color:rgba(21,178,236,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgba(113,128,150,var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(74,85,104,var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity:1;color:rgba(160,174,192,var(--tw-text-opacity))}.focus\:text-red-500:focus{--tw-text-opacity:1;color:rgba(239,68,68,var(--tw-text-opacity))}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.italic{font-style:italic}.not-italic{font-style:normal}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.underline{text-decoration:underline}.no-underline{text-decoration:none}.hover\:underline:hover{text-decoration:underline}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.visible{visibility:visible}.whitespace-nowrap{white-space:nowrap}.w-0{width:0}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-20{width:5rem}.w-24{width:6rem}.w-32{width:8rem}.w-40{width:10rem}.w-48{width:12rem}.w-56{width:14rem}.w-60{width:240px}.w-64{width:16rem}.w-88{width:22rem}.w-1\/2{width:50%}.w-11\/12{width:91.666667%}.w-full{width:100%}.z-0{z-index:0}.z-5{z-index:5}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.gap-y-6{row-gap:1.5rem}.grid-flow-row{grid-auto-flow:row}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-5{grid-column:span 5/span 5}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-10{grid-column:span 10/span 10}.col-span-12{grid-column:span 12/span 12}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.rotate-90{--tw-rotate:90deg}.translate-x-0{--tw-translate-x:0px}.-translate-x-full{--tw-translate-x:-100%}.translate-y-0{--tw-translate-y:0px}.translate-y-2{--tw-translate-y:0.5rem}.translate-y-4{--tw-translate-y:1rem}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-linear{transition-timing-function:linear}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.delay-200{transition-delay:.2s}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}0%{transform:scale(0)}}@keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}0%{transform:scale(0)}}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.sw-page{min-height:calc(100vh - 39px)!important}.sw-scroll::-webkit-scrollbar{width:4px;cursor:pointer}.sw-scroll::-webkit-scrollbar-track{background-color:#e5e7eb;cursor:pointer}.sw-scroll::-webkit-scrollbar-thumb{cursor:pointer;background-color:#a0aec0}.sw-border-gap-15{border-spacing:0 15px}.sw-border-gap-0{border-spacing:0}input:-webkit-autofill{background-color:transparent!important;-webkit-box-shadow:0 0 0 50px #fff inset}.tooltip{display:block!important;z-index:10000}.tooltip .tooltip-inner{background:#000;color:#fff;border-radius:16px;padding:5px 10px 4px}.tooltip .tooltip-arrow{width:0;height:0;border-style:solid;position:absolute;margin:5px;border-color:#000;z-index:1}.tooltip[x-placement^=top]{margin-bottom:5px}.tooltip[x-placement^=top] .tooltip-arrow{border-width:5px 5px 0;border-left-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;bottom:-5px;left:calc(50% - 5px);margin-top:0;margin-bottom:0}.tooltip[x-placement^=bottom]{margin-top:5px}.tooltip[x-placement^=bottom] .tooltip-arrow{border-width:0 5px 5px;border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;top:-5px;left:calc(50% - 5px);margin-top:0;margin-bottom:0}.tooltip[x-placement^=right]{margin-left:5px}.tooltip[x-placement^=right] .tooltip-arrow{border-width:5px 5px 5px 0;border-left-color:transparent!important;border-top-color:transparent!important;border-bottom-color:transparent!important;left:-5px;top:calc(50% - 5px);margin-left:0;margin-right:0}.tooltip[x-placement^=left]{margin-right:5px}.tooltip[x-placement^=left] .tooltip-arrow{border-width:5px 0 5px 5px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;right:-5px;top:calc(50% - 5px);margin-left:0;margin-right:0}.tooltip.popover .popover-inner{background:#f9f9f9;color:#000;padding:24px;border-radius:5px;box-shadow:0 5px 30px rgba(0,0,0,.1)}.tooltip.popover .popover-arrow{border-color:#f9f9f9}.tooltip[aria-hidden=true]{visibility:hidden;opacity:0;transition:opacity .15s,visibility .15s}.tooltip[aria-hidden=false]{visibility:visible;opacity:1;transition:opacity .15s}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#352dc9;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}.pace .pace-progress-inner{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #5851d8,0 0 5px #5851d8;opacity:1;transform:rotate(3deg) translateY(-4px)}.pace .pace-activity{display:block;position:fixed;z-index:2000;top:15px;right:15px;width:14px;height:14px;border-color:#5851d8 transparent transparent #5851d8;border-style:solid;border-width:2px;border-radius:10px;-webkit-animation:pace-spinner .4s linear infinite;animation:pace-spinner .4s linear infinite}@-webkit-keyframes pace-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes pace-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.shake{-webkit-animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}@-webkit-keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}.swal-icon--custom{height:80px;width:80px}@media (max-width:768px){.table-component .sw-dropdown{position:absolute;visibility:visible;top:15px;right:10px}}.swal2-container .swal2-popup{transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important;transition-delay:.15s!important;padding:1.5rem!important}.swal2-actions{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:.75rem!important;margin-top:1.5rem!important;width:100%!important;flex-wrap:nowrap!important;padding:0!important}.swal2-content{text-align:center!important;font-size:.875rem!important;line-height:1.25rem!important;color:#6b7280!important;font-weight:500!important;margin-top:.5rem!important}.swal2-icon{height:3rem!important;width:3rem!important;border:none!important;margin:0!important}.swal2-header{display:flex!important;justify-content:center!important;align-items:center!important}.swal2-title{text-align:center!important;margin-top:.75!important;font-weight:500!important;color:#111827!important;font-size:1.125rem!important;line-height:1.75rem!important;margin-top:1.25rem}.swal2-icon.swal2-error{background:#fed7d7!important;border-radius:9999px!important}.swal2-icon.swal2-success{background:#c6f6d5!important;border-radius:9999px!important}.swal2-icon.swal2-warning{background:#feebc8!important;border-radius:9999px!important}.swal2-icon.swal2-info{background:#bee3f8!important;border-radius:9999px!important}.swal2-icon.swal2-question{background:#edf2f7!important;border-radius:9999px!important}.swal2-icon-content{font-size:2.75em!important}.swal2-title{margin:1.25rem 0 0!important}@media (min-width:640px){.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:items-start{align-items:flex-start}.sm\:justify-end{justify-content:flex-end}.sm\:h-screen{height:100vh}.sm\:m-0{margin:0}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-4xl{max-width:56rem}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:pt-8{padding-top:2rem}.sm\:align-middle{vertical-align:middle}.sm\:w-7\/12{width:58.333333%}.sm\:w-full{width:100%}.sm\:gap-4{gap:1rem}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.sm\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1}.sm\:translate-x-0{--tw-translate-x:0px}.sm\:translate-x-2{--tw-translate-x:0.5rem}.sm\:translate-y-0{--tw-translate-y:0px}}@media (min-width:768px){.md\:border-b{border-bottom-width:1px}.md\:block{display:block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:justify-end{justify-content:flex-end}.md\:float-left{float:left}.md\:h-9{height:2.25rem}.md\:h-16{height:4rem}.md\:mt-0{margin-top:0}.md\:mb-0{margin-bottom:0}.md\:ml-0{margin-left:0}.md\:mt-2{margin-top:.5rem}.md\:mt-6{margin-top:1.5rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mt-8{margin-top:2rem}.md\:mb-8{margin-bottom:2rem}.md\:mt-12{margin-top:3rem}.md\:p-8{padding:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:pt-4{padding-top:1rem}.md\:pt-16{padding-top:4rem}.md\:pt-40{padding-top:10rem}.md\:pb-48{padding-bottom:12rem}.md\:relative{position:relative}.md\:text-right{text-align:right}.md\:w-9{width:2.25rem}.md\:w-auto{width:auto}.md\:w-2\/3{width:66.666667%}.md\:w-2\/6{width:33.333333%}.md\:w-7\/12{width:58.333333%}.md\:w-full{width:100%}.md\:gap-10{gap:2.5rem}.md\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.md\:gap-y-4{row-gap:1rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-8{grid-column:span 8/span 8}.md\:col-start-5{grid-column-start:5}}@media (min-width:1024px){.lg\:border-t-0{border-top-width:0}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:items-start{align-items:flex-start}.lg\:justify-between{justify-content:space-between}.lg\:text-sm{font-size:.875rem;line-height:1.25rem}.lg\:text-2xl{font-size:1.5rem;line-height:2rem}.lg\:mt-0{margin-top:0}.lg\:mt-2{margin-top:.5rem}.lg\:ml-2{margin-left:.5rem}.lg\:mb-6{margin-bottom:1.5rem}.lg\:ml-6{margin-left:1.5rem}.lg\:pt-8{padding-top:2rem}.lg\:text-right{text-align:right}.lg\:w-auto{width:auto}.lg\:w-1\/2{width:50%}.lg\:w-7\/12{width:58.333333%}.lg\:w-9\/12{width:75%}.lg\:gap-6{gap:1.5rem}.lg\:gap-24{gap:6rem}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}}@media (min-width:1280px){.xl\:block{display:block}.xl\:hidden{display:none}.xl\:h-12{height:3rem}.xl\:text-base{font-size:1rem;line-height:1.5rem}.xl\:text-lg{font-size:1.125rem;line-height:1.75rem}.xl\:text-3xl{font-size:1.875rem;line-height:2.25rem}.xl\:text-5xl{font-size:3rem;line-height:1}.xl\:leading-6{line-height:1.5rem}.xl\:leading-tight{line-height:1.25}.xl\:mx-8{margin-left:2rem;margin-right:2rem}.xl\:mt-0{margin-top:0}.xl\:ml-8{margin-left:2rem}.xl\:ml-64{margin-left:16rem}.xl\:p-4{padding:1rem}.xl\:pl-0{padding-left:0}.xl\:pl-96{padding-left:24rem}.xl\:text-right{text-align:right}.xl\:w-12{width:3rem}.xl\:w-64{width:16rem}.xl\:gap-8{gap:2rem}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-8{grid-column:span 8/span 8}.xl\:col-span-9{grid-column:span 9/span 9}}@media (min-width:1440px){.xxl\:col-span-2{grid-column:span 2/span 2}.xxl\:col-span-10{grid-column:span 10/span 10}} diff --git a/public/assets/css/crater.css.map b/public/assets/css/crater.css.map deleted file mode 100644 index 93f38e014..000000000 --- a/public/assets/css/crater.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./crater.scss","webpack:///./node_modules/toastr/toastr.scss","webpack:///./components/v-tooltips.scss","webpack:///./components/pace-loader.scss","webpack:///./components/animation.scss","webpack:///"],"names":[],"mappings":"AAAA;;AAAA;;;CAAA;;AAAA;;CAAA;;AAAA;;;EAAA;AAAA;;AAAA;;CAAA;;AAAA;EAAA;EAAA;KAAA;AAAA;;AAAA;;;CAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;;CAAA;;AAAA;EAAA;AAAA;;AAAA;;CAAA;;AAAA;EAAA;;;;;;;;;kBAAA;AAAA;;AAAA;;;CAAA;;AAAA;;;CAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;;CAAA;;AAAA;EAAA;UAAA;AAAA;;AAAA;;CAAA;;AAAA;;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;;;;EAAA;;;;;;WAAA;EAAA;AAAA;;AAAA;;CAAA;;AAAA;EAAA;AAAA;;AAAA;;CAAA;;AAAA;;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;;;CAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;;;CAAA;;AAAA;;;;;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;SAAA;EAAA;AAAA;;AAAA;;CAAA;;AAAA;;;;EAAA;AAAA;;AAAA;;CAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;CAAA;;AAAA;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;EAAA;AAAA;;AAAA;;CAAA;;AAAA;EAAA;AAAA;;AAAA;;CAAA;;AAAA;EAAA;AAAA;;AAAA;;CAAA;;AAAA;;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;CAAA;;AAAA;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;;CAAA;;AAAA;;CAAA;;AAAA;EAAA;AAAA;;AAAA;;;;EAAA;;AAAA;;EAAA;;AAAA;;;;;;;;;;;;;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;;EAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;EAAA;EAAA;EAAA;AAAA;;AAAA;;EAAA;;AAAA;;;;;EAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;;EAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;EAAA;;AAAA;;;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;;EAAA;;AAAA;EAAA;AAAA;;AAAA;;;;;;;;EAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;;EAAA;AAAA;;AAAA;;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;;;;;;EAAA;EAAA;AAAA;;AAAA;;;EAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;;;;;;EAAA;;AAAA;;;;;EAAA;EAAA;EAAA;AAAA;;AAAA;;;;;EAAA;;AAAA;;;;EAAA;AAAA;;AAAA;;;;;;EAAA;;AAAA;;;;;;;;EAAA;EAAA;AAAA;;AAAA;;;;;EAAA;;AAAA;;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAEA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;UAAA;EAAA;UAAA;EAAA;UAAA;EAAA;UAAA;EAAA;UAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;UAAA;EAAA;UAAA;EAAA;UAAA;EAAA;UAAA;EAAA;UAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;UAAA;EAAA;UAAA;EAAA;EAAA;EAAA;UAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;EAAA;UAAA;EAAA;UAAA;EAAA;EAAA;EAAA;UAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;EAAA;UAAA;EAAA;UAAA;EAAA;EAAA;EAAA;UAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;UAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;UAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAEA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;KAAA;UAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;KAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;MAAA;AAAA;;AAAA;EAAA;MAAA;AAAA;;AAAA;EAAA;MAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;KAAA;MAAA;UAAA;AAAA;;AAAA;EAAA;KAAA;MAAA;UAAA;AAAA;;AAAA;EAAA;KAAA;UAAA;AAAA;;AAAA;EAAA;KAAA;MAAA;UAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;OAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;EAAA;AAAA;;AAAA;EAAA;IAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;EAAA;AAAA;;AAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;UAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;AAAA;;AAAA;EAAA;EAAA;AAAA;;ACJA;EACE;ADIF;;ACFA;EACE;EACA;ADKF;;ACHA;;EAEE;ADMF;;ACJA;EACE;EACA;ADOF;;ACLA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ADQF;;ACNA;;EAEE;EACA;EACA;EACA;EACA;EACA;ADSF;;ACPA;;yDAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;ADUF;;ACRA;EACE;EACA;EACA;ADWF;;ACTA;EACE;EACA;EACA;ADYF;;ACVA;EACE;EACA;EACA;ADaF;;ACXA;EACE;EACA;EACA;ADcF;;ACZA;EACE;EACA;ADeF;;ACbA;EACE;EACA;ADgBF;;ACdA;EACE;EACA;ADiBF;;ACfA;EACE;EACA;ADkBF;;AChBA;EACE;EACA;EACA;ADmBF;;AChBA;EAGE;ADmBF;;ACjBA;EACE;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;ADoBF;;AClBA;EAGE;EACA;EACA;EACA;EACA;ADqBF;;ACnBA;EACE;ADsBF;;ACpBA;EACE;ADuBF;;ACrBA;EACE;ADwBF;;ACtBA;EACE;ADyBF;;ACvBA;;EAEE;EACA;EACA;AD0BF;;ACxBA;;EAEE;EACA;EACA;AD2BF;;ACzBA;EACE;AD4BF;;AC1BA;EACE;AD6BF;;AC3BA;EACE;AD8BF;;AC5BA;EACE;AD+BF;;AC7BA;EACE;ADgCF;;AC7BA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ADgCF;;AC7BA;;AACA;EACE;IACE;IACA;EDgCF;;EC9BA;IACE;IACA;EDiCF;AACF;;AC/BA;EACE;IACE;IACA;EDiCF;;EC/BA;IACE;IACA;EDkCF;AACF;;AChCA;EACE;IACE;IACA;EDkCF;AACF;;AEzOA;EACI;EACA;AF2OJ;;AEzOI;EACE;EACA;EACA;EACA;AF2ON;;AExOI;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AF0ON;;AEvOI;EACE;AFyON;;AEvOM;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AFyOR;;AErOI;EACE;AFuON;;AErOM;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AFuOR;;AEnOI;EACE;AFqON;;AEnOM;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AFqOR;;AEjOI;EACE;AFmON;;AEjOM;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AFmOR;;AE5NM;EACE,mBAHM;EAIN;EACA;EACA;EACA;AF8NR;;AE3NM;EACE,qBAXM;AFwOd;;AEzNI;EACE;EACA;EACA;AF2NN;;AExNI;EACE;EACA;EACA;AF0NN;;AGlUA;EACE;EACA;EACA;EACA;EACA;MAAA;AHqUF;;AGlUA;EACE;AHqUF;;AGlUA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AHqUF;;AGlUA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAKA;AHqUF;;AGlUA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,yBAhDkB;EAiDlB,0BAjDkB;EAkDlB;EACA;EAIA;AHqUF;;AGlUA;EACE;IAEE;EHqUF;;EGnUA;IAEE;EHqUF;AACF;;AGjSA;EACE;IACE;IACA;EHiUF;;EG/TA;IACE;IACA;EHiUF;AACF;;AI/aA;EACE;UAAA;EACA;EACA;UAAA;EACA;AJibF;;AI9aA;EACE;IAEE;EJgbF;;EI7aA;IAEE;EJ8aF;;EI3aA;IAGE;EJ2aF;;EIxaA;IAEE;EJyaF;AACF;;AI7bA;EACE;IAEE;EJgbF;;EI7aA;IAEE;EJ8aF;;EI3aA;IAGE;EJ2aF;;EIxaA;IAEE;EJyaF;AACF;;AA7aA;EACE;EACA;AA+aF;;AA5aA;EACE;IACE;IACA;IACA;IACA;EA+aF;AACF;;AKjdA;ELEA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAEA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;CKJA;;AAAA;ELEA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAEA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;CKJA;;AAAA;ELEA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAEA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;CKJA;;AAAA;ELEA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAEA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;CKJA;;AAAA;ELEA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAEA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;CKJA;;AAAA;ELEA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAAA;IAAA;MAAA;IAAA;EAAA;;EAEA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;OAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;QAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;YAAA;EAAA;;EAAA;IAAA;OAAA;QAAA;YAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;SAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;IAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA;;EAAA;IAAA;YAAA;EAAA","file":"assets/css/crater.css","sourcesContent":["@tailwind base;\n\n@tailwind components;\n\n@tailwind utilities;\n\n\n// Plugins\n//----------------------------------\n\n@import '../../../node_modules/toastr/toastr';\n\n// Base Components\n//----------------------------------\n\n@import 'components/v-tooltips.scss';\n\n// Components\n//----------------------------------\n\n@import 'components/pace-loader';\n@import 'components/animation';\n\n.swal-icon--custom {\n height: 80px;\n width: 80px;\n}\n\n@media (max-width: 768px) {\n .table-component .sw-dropdown {\n position: absolute;\n visibility: visible;\n top: 15px;\n right: 10px;\n }\n}\n",".toast-title {\n font-weight: bold;\n}\n.toast-message {\n -ms-word-wrap: break-word;\n word-wrap: break-word;\n}\n.toast-message a,\n.toast-message label {\n color: #ffffff;\n}\n.toast-message a:hover {\n color: #cccccc;\n text-decoration: none;\n}\n.toast-close-button {\n position: relative;\n right: -0.3em;\n top: -0.3em;\n float: right;\n font-size: 20px;\n font-weight: bold;\n color: #ffffff;\n -webkit-text-shadow: 0 1px 0 #ffffff;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.8;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\n filter: alpha(opacity=80);\n}\n.toast-close-button:hover,\n.toast-close-button:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.4;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n filter: alpha(opacity=40);\n}\n/*Additional properties for button version\n iOS requires the button element instead of an anchor tag.\n If you want the anchor version, it requires `href=\"#\"`.*/\nbutton.toast-close-button {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.toast-top-center {\n top: 0;\n right: 0;\n width: 100%;\n}\n.toast-bottom-center {\n bottom: 0;\n right: 0;\n width: 100%;\n}\n.toast-top-full-width {\n top: 0;\n right: 0;\n width: 100%;\n}\n.toast-bottom-full-width {\n bottom: 0;\n right: 0;\n width: 100%;\n}\n.toast-top-left {\n top: 12px;\n left: 12px;\n}\n.toast-top-right {\n top: 12px;\n right: 12px;\n}\n.toast-bottom-right {\n right: 12px;\n bottom: 12px;\n}\n.toast-bottom-left {\n bottom: 12px;\n left: 12px;\n}\n#toast-container {\n position: fixed;\n z-index: 999999;\n /*overrides*/\n\n}\n#toast-container * {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n#toast-container > div {\n position: relative;\n overflow: hidden;\n margin: 0 0 6px;\n padding: 15px 15px 15px 50px;\n width: 300px;\n -moz-border-radius: 3px 3px 3px 3px;\n -webkit-border-radius: 3px 3px 3px 3px;\n border-radius: 3px 3px 3px 3px;\n background-position: 15px center;\n background-repeat: no-repeat;\n -moz-box-shadow: 0 0 12px #999999;\n -webkit-box-shadow: 0 0 12px #999999;\n box-shadow: 0 0 12px #999999;\n color: #ffffff;\n opacity: 0.8;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\n filter: alpha(opacity=80);\n}\n#toast-container > div:hover {\n -moz-box-shadow: 0 0 12px #000000;\n -webkit-box-shadow: 0 0 12px #000000;\n box-shadow: 0 0 12px #000000;\n opacity: 1;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n filter: alpha(opacity=100);\n cursor: pointer;\n}\n#toast-container > .toast-info {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=\") !important;\n}\n#toast-container > .toast-error {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=\") !important;\n}\n#toast-container > .toast-success {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==\") !important;\n}\n#toast-container > .toast-warning {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=\") !important;\n}\n#toast-container.toast-top-center > div,\n#toast-container.toast-bottom-center > div {\n width: 300px;\n margin-left: auto;\n margin-right: auto;\n}\n#toast-container.toast-top-full-width > div,\n#toast-container.toast-bottom-full-width > div {\n width: 96%;\n margin-left: auto;\n margin-right: auto;\n}\n.toast {\n background-color: #030303;\n}\n.toast-success {\n background-color: #51a351;\n}\n.toast-error {\n background-color: #bd362f;\n}\n.toast-info {\n background-color: #2f96b4;\n}\n.toast-warning {\n background-color: #f89406;\n}\n\n.toast-progress {\n position: absolute;\n left: 0;\n bottom: 0;\n height: 4px;\n background-color: #000000;\n opacity: 0.4;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n filter: alpha(opacity=40);\n}\n\n/*Responsive Design*/\n@media all and (max-width: 240px) {\n #toast-container > div {\n padding: 8px 8px 8px 50px;\n width: 11em;\n }\n #toast-container .toast-close-button {\n right: -0.2em;\n top: -0.2em;\n }\n}\n@media all and (min-width: 241px) and (max-width: 480px) {\n #toast-container > div {\n padding: 8px 8px 8px 50px;\n width: 18em;\n }\n #toast-container .toast-close-button {\n right: -0.2em;\n top: -0.2em;\n }\n}\n@media all and (min-width: 481px) and (max-width: 768px) {\n #toast-container > div {\n padding: 15px 15px 15px 50px;\n width: 25em;\n }\n}\n",".tooltip {\n display: block !important;\n z-index: 10000;\n\n .tooltip-inner {\n background: black;\n color: white;\n border-radius: 16px;\n padding: 5px 10px 4px;\n }\n\n .tooltip-arrow {\n width: 0;\n height: 0;\n border-style: solid;\n position: absolute;\n margin: 5px;\n border-color: black;\n z-index: 1;\n }\n\n &[x-placement^=\"top\"] {\n margin-bottom: 5px;\n\n .tooltip-arrow {\n border-width: 5px 5px 0 5px;\n border-left-color: transparent !important;\n border-right-color: transparent !important;\n border-bottom-color: transparent !important;\n bottom: -5px;\n left: calc(50% - 5px);\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n\n &[x-placement^=\"bottom\"] {\n margin-top: 5px;\n\n .tooltip-arrow {\n border-width: 0 5px 5px 5px;\n border-left-color: transparent !important;\n border-right-color: transparent !important;\n border-top-color: transparent !important;\n top: -5px;\n left: calc(50% - 5px);\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n\n &[x-placement^=\"right\"] {\n margin-left: 5px;\n\n .tooltip-arrow {\n border-width: 5px 5px 5px 0;\n border-left-color: transparent !important;\n border-top-color: transparent !important;\n border-bottom-color: transparent !important;\n left: -5px;\n top: calc(50% - 5px);\n margin-left: 0;\n margin-right: 0;\n }\n }\n\n &[x-placement^=\"left\"] {\n margin-right: 5px;\n\n .tooltip-arrow {\n border-width: 5px 0 5px 5px;\n border-top-color: transparent !important;\n border-right-color: transparent !important;\n border-bottom-color: transparent !important;\n right: -5px;\n top: calc(50% - 5px);\n margin-left: 0;\n margin-right: 0;\n }\n }\n\n &.popover {\n $color: #f9f9f9;\n\n .popover-inner {\n background: $color;\n color: black;\n padding: 24px;\n border-radius: 5px;\n box-shadow: 0 5px 30px rgba(black, .1);\n }\n\n .popover-arrow {\n border-color: $color;\n }\n }\n\n &[aria-hidden='true'] {\n visibility: hidden;\n opacity: 0;\n transition: opacity .15s, visibility .15s;\n }\n\n &[aria-hidden='false'] {\n visibility: visible;\n opacity: 1;\n transition: opacity .15s;\n }\n }\n","$pace-loader-color: #5851d8;\n\n.pace {\n -webkit-pointer-events: none;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.pace-inactive {\n display: none;\n}\n\n.pace .pace-progress {\n background: darken($pace-loader-color, 10%);\n position: fixed;\n z-index: 2000;\n top: 0;\n right: 100%;\n width: 100%;\n height: 2px;\n}\n\n.pace .pace-progress-inner {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px $pace-loader-color, 0 0 5px $pace-loader-color;\n opacity: 1;\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -moz-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n -o-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n display: block;\n position: fixed;\n z-index: 2000;\n top: 15px;\n right: 15px;\n width: 14px;\n height: 14px;\n border: solid 2px transparent;\n border-top-color: $pace-loader-color;\n border-left-color: $pace-loader-color;\n border-radius: 10px;\n -webkit-animation: pace-spinner 400ms linear infinite;\n -moz-animation: pace-spinner 400ms linear infinite;\n -ms-animation: pace-spinner 400ms linear infinite;\n -o-animation: pace-spinner 400ms linear infinite;\n animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@-moz-keyframes pace-spinner {\n 0% {\n -moz-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -moz-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@-o-keyframes pace-spinner {\n 0% {\n -o-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -o-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@-ms-keyframes pace-spinner {\n 0% {\n -ms-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -ms-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes pace-spinner {\n 0% {\n transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n",".shake {\n animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;\n transform: translate3d(0, 0, 0);\n backface-visibility: hidden;\n perspective: 1000px;\n}\n\n@keyframes shake {\n 10%,\n 90% {\n transform: translate3d(-1px, 0, 0);\n }\n\n 20%,\n 80% {\n transform: translate3d(2px, 0, 0);\n }\n\n 30%,\n 50%,\n 70% {\n transform: translate3d(-4px, 0, 0);\n }\n\n 40%,\n 60% {\n transform: translate3d(4px, 0, 0);\n }\n}\n",null],"sourceRoot":""} \ No newline at end of file diff --git a/public/assets/icon/check-circle-solid.svg b/public/assets/icon/check-circle-solid.svg deleted file mode 100644 index 2c21c4109..000000000 --- a/public/assets/icon/check-circle-solid.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - diff --git a/public/assets/icon/envelope-solid.svg b/public/assets/icon/envelope-solid.svg deleted file mode 100644 index 5102d95ab..000000000 --- a/public/assets/icon/envelope-solid.svg +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/public/assets/icon/file-alt-solid.svg b/public/assets/icon/file-alt-solid.svg deleted file mode 100644 index 545149142..000000000 --- a/public/assets/icon/file-alt-solid.svg +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/public/assets/icon/paper-plane-solid.svg b/public/assets/icon/paper-plane-solid.svg deleted file mode 100644 index 771707c58..000000000 --- a/public/assets/icon/paper-plane-solid.svg +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/public/assets/icon/times-circle-solid.svg b/public/assets/icon/times-circle-solid.svg deleted file mode 100644 index f64cfebc9..000000000 --- a/public/assets/icon/times-circle-solid.svg +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/public/assets/icon/trash-solid.svg b/public/assets/icon/trash-solid.svg deleted file mode 100644 index 6d52f5b6f..000000000 --- a/public/assets/icon/trash-solid.svg +++ /dev/null @@ -1,14 +0,0 @@ - \ No newline at end of file diff --git a/public/assets/img/Frame.png b/public/assets/img/Frame.png deleted file mode 100755 index d755b2813..000000000 Binary files a/public/assets/img/Frame.png and /dev/null differ diff --git a/public/assets/img/Vector-1.png b/public/assets/img/Vector-1.png deleted file mode 100644 index 610022393..000000000 Binary files a/public/assets/img/Vector-1.png and /dev/null differ diff --git a/public/assets/img/Vector-2.png b/public/assets/img/Vector-2.png deleted file mode 100644 index 0b777b6ec..000000000 Binary files a/public/assets/img/Vector-2.png and /dev/null differ diff --git a/public/assets/img/Vector.png b/public/assets/img/Vector.png deleted file mode 100644 index 3d861e546..000000000 Binary files a/public/assets/img/Vector.png and /dev/null differ diff --git a/public/assets/img/favicons/browserconfig.xml b/public/assets/img/favicons/browserconfig.xml deleted file mode 100644 index d9867302a..000000000 --- a/public/assets/img/favicons/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #ffffff - - - diff --git a/public/assets/img/favicons/site.webmanifest b/public/assets/img/favicons/site.webmanifest deleted file mode 100644 index c42d7665c..000000000 --- a/public/assets/img/favicons/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "", - "short_name": "", - "icons": [ - { - "src": "/assets/img/favicons/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/assets/img/favicons/android-chrome-256x256.png", - "sizes": "256x256", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/public/assets/js/app.js b/public/assets/js/app.js deleted file mode 100644 index feb0d700b..000000000 --- a/public/assets/js/app.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see app.js.LICENSE.txt */ -(()=>{var e={7757:(e,t,n)=>{e.exports=n(5666)},9381:function(e,t,n){var a;"undefined"!=typeof self&&self,a=function(e){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(a,r,function(t){return e[t]}.bind(null,r));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="fb15")}({"0006":function(e,t,n){var a=n("95b7"),r=n("e7d9"),i=n("ebae");e.exports=function(e,t,n,o,s,l){var c=1&n,d=e.length,u=t.length;if(d!=u&&!(c&&u>d))return!1;var p=l.get(e),m=l.get(t);if(p&&m)return p==t&&m==e;var f=-1,h=!0,_=2&n?new a:void 0;for(l.set(e,t),l.set(t,e);++f=4||"ഉച്ച കഴിഞ്ഞ്"===t||"വൈകുന്നേരം"===t?e+12:e},meridiem:function(e,t,n){return e<4?"രാത്രി":e<12?"രാവിലെ":e<17?"ഉച്ച കഴിഞ്ഞ്":e<20?"വൈകുന്നേരം":"രാത്രി"}})}(n("c1df"))},"0366":function(e,t,n){var a=n("1c0b");e.exports=function(e,t,n){if(a(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,a){return e.call(t,n,a)};case 3:return function(n,a,r){return e.call(t,n,a,r)}}return function(){return e.apply(t,arguments)}}},"03ec":function(e,t,n){!function(e){"use strict";e.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(e){return e+(/сехет$/i.exec(e)?"рен":/ҫул$/i.exec(e)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n("c1df"))},"0558":function(e,t,n){!function(e){"use strict";function t(e){return e%100==11||e%10!=1}function n(e,n,a,r){var i=e+" ";switch(a){case"s":return n||r?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return t(e)?i+(n||r?"sekúndur":"sekúndum"):i+"sekúnda";case"m":return n?"mínúta":"mínútu";case"mm":return t(e)?i+(n||r?"mínútur":"mínútum"):n?i+"mínúta":i+"mínútu";case"hh":return t(e)?i+(n||r?"klukkustundir":"klukkustundum"):i+"klukkustund";case"d":return n?"dagur":r?"dag":"degi";case"dd":return t(e)?n?i+"dagar":i+(r?"daga":"dögum"):n?i+"dagur":i+(r?"dag":"degi");case"M":return n?"mánuður":r?"mánuð":"mánuði";case"MM":return t(e)?n?i+"mánuðir":i+(r?"mánuði":"mánuðum"):n?i+"mánuður":i+(r?"mánuð":"mánuði");case"y":return n||r?"ár":"ári";case"yy":return t(e)?i+(n||r?"ár":"árum"):i+(n||r?"ár":"ári")}}e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("c1df"))},"057f":function(e,t,n){var a=n("fc6a"),r=n("241c").f,i={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return o&&"[object Window]"==i.call(e)?function(e){try{return r(e)}catch(e){return o.slice()}}(e):r(a(e))}},"06cf":function(e,t,n){var a=n("83ab"),r=n("d1e7"),i=n("5c6c"),o=n("fc6a"),s=n("c04e"),l=n("5135"),c=n("0cfb"),d=Object.getOwnPropertyDescriptor;t.f=a?d:function(e,t){if(e=o(e),t=s(t,!0),c)try{return d(e,t)}catch(e){}if(l(e,t))return i(!r.f.call(e,t),e[t])}},"0721":function(e,t,n){!function(e){"use strict";e.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("c1df"))},"073e":function(e,t,n){"use strict";var a=n("5dbe"),r=i(Error);function i(e){return t.displayName=e.displayName||e.name,t;function t(t){return t&&(t=a.apply(null,arguments)),new e(t)}}e.exports=r,r.eval=i(EvalError),r.range=i(RangeError),r.reference=i(ReferenceError),r.syntax=i(SyntaxError),r.type=i(TypeError),r.uri=i(URIError),r.create=i},"079e":function(e,t,n){!function(e){"use strict";e.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"令和",narrow:"㋿",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"平成",narrow:"㍻",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"昭和",narrow:"㍼",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"大正",narrow:"㍽",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"明治",narrow:"㍾",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"西暦",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"紀元前",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(元|\d+)年/,eraYearOrdinalParse:function(e,t){return"元"===t[1]?1:parseInt(t[1]||e,10)},months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,t,n){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){return e.week()!==this.week()?"[来週]dddd LT":"dddd LT"},lastDay:"[昨日] LT",lastWeek:function(e){return this.week()!==e.week()?"[先週]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(e,t){switch(t){case"y":return 1===e?"元年":e+"年";case"d":case"D":case"DDD":return e+"日";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}(n("c1df"))},"07c7":function(e,t){e.exports=function(){return!1}},"093e":function(e,t,n){var a=n("5438"),r=n("36a2"),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var o=e[t];i.call(e,t)&&r(o,n)&&(void 0!==n||t in e)||a(e,t,n)}},"0a3c":function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),a=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?n[e.month()]:t[e.month()]:t},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("c1df"))},"0a84":function(e,t,n){!function(e){"use strict";e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n("c1df"))},"0ac0":function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"b",(function(){return v})),n.d(t,"c",(function(){return _})),n.d(t,"d",(function(){return f})),n.d(t,"e",(function(){return d})),n.d(t,"f",(function(){return D})),n.d(t,"g",(function(){return k})),n.d(t,"h",(function(){return C})),n.d(t,"i",(function(){return w})),n.d(t,"j",(function(){return S})),n.d(t,"k",(function(){return b}));var a=n("304a"),r=Math.pow(2,16);function i(e){return 65535&e}var o=function(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=null),this.pos=e,this.deleted=t,this.recover=n},s=function(e,t){void 0===t&&(t=!1),this.ranges=e,this.inverted=t};s.prototype.recover=function(e){var t=0,n=i(e);if(!this.inverted)for(var a=0;ae)break;var d=this.ranges[l+i],u=this.ranges[l+s],p=c+d;if(e<=p){var m=c+a+((d?e==c?-1:e==p?1:t:t)<0?0:u);if(n)return m;var f=e==(t<0?c:p)?null:l/3+(e-c)*r;return new o(m,t<0?e!=c:e!=p,f)}a+=u-d}return n?e+a:new o(e+a)},s.prototype.touches=function(e,t){for(var n=0,a=i(t),r=this.inverted?2:1,o=this.inverted?1:2,s=0;se)break;var c=this.ranges[s+r];if(e<=l+c&&s==3*a)return!0;n+=this.ranges[s+o]-c}return!1},s.prototype.forEach=function(e){for(var t=this.inverted?2:1,n=this.inverted?1:2,a=0,r=0;a=0;t--){var a=e.getMirror(t);this.appendMap(e.maps[t].invert(),null!=a&&a>t?n-a-1:null)}},l.prototype.invert=function(){var e=new l;return e.appendMappingInverted(this),e},l.prototype.map=function(e,t){if(void 0===t&&(t=1),this.mirror)return this._map(e,t,!0);for(var n=this.from;nr&&s0},d.prototype.addStep=function(e,t){this.docs.push(this.doc),this.steps.push(e),this.mapping.appendMap(e.getMap()),this.doc=t},Object.defineProperties(d.prototype,u);var m=Object.create(null),f=function(){};f.prototype.apply=function(e){return p()},f.prototype.getMap=function(){return s.empty},f.prototype.invert=function(e){return p()},f.prototype.map=function(e){return p()},f.prototype.merge=function(e){return null},f.prototype.toJSON=function(){return p()},f.fromJSON=function(e,t){if(!t||!t.stepType)throw new RangeError("Invalid input for Step.fromJSON");var n=m[t.stepType];if(!n)throw new RangeError("No step type "+t.stepType+" defined");return n.fromJSON(e,t)},f.jsonID=function(e,t){if(e in m)throw new RangeError("Duplicate use of step JSON ID "+e);return m[e]=t,t.prototype.jsonID=e,t};var h=function(e,t){this.doc=e,this.failed=t};h.ok=function(e){return new h(e,null)},h.fail=function(e){return new h(null,e)},h.fromReplace=function(e,t,n,r){try{return h.ok(e.replace(t,n,r))}catch(e){if(e instanceof a.ReplaceError)return h.fail(e.message);throw e}};var _=function(e){function t(t,n,a,r){e.call(this),this.from=t,this.to=n,this.slice=a,this.structure=!!r}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.apply=function(e){return this.structure&&g(e,this.from,this.to)?h.fail("Structure replace would overwrite content"):h.fromReplace(e,this.from,this.to,this.slice)},t.prototype.getMap=function(){return new s([this.from,this.to-this.from,this.slice.size])},t.prototype.invert=function(e){return new t(this.from,this.from+this.slice.size,e.slice(this.from,this.to))},t.prototype.map=function(e){var n=e.mapResult(this.from,1),a=e.mapResult(this.to,-1);return n.deleted&&a.deleted?null:new t(n.pos,Math.max(n.pos,a.pos),this.slice)},t.prototype.merge=function(e){if(!(e instanceof t)||e.structure!=this.structure)return null;if(this.from+this.slice.size!=e.from||this.slice.openEnd||e.slice.openStart){if(e.to!=this.from||this.slice.openStart||e.slice.openEnd)return null;var n=this.slice.size+e.slice.size==0?a.Slice.empty:new a.Slice(e.slice.content.append(this.slice.content),e.slice.openStart,this.slice.openEnd);return new t(e.from,this.to,n,this.structure)}var r=this.slice.size+e.slice.size==0?a.Slice.empty:new a.Slice(this.slice.content.append(e.slice.content),this.slice.openStart,e.slice.openEnd);return new t(this.from,this.to+(e.to-e.from),r,this.structure)},t.prototype.toJSON=function(){var e={stepType:"replace",from:this.from,to:this.to};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e},t.fromJSON=function(e,n){if("number"!=typeof n.from||"number"!=typeof n.to)throw new RangeError("Invalid input for ReplaceStep.fromJSON");return new t(n.from,n.to,a.Slice.fromJSON(e,n.slice),!!n.structure)},t}(f);f.jsonID("replace",_);var v=function(e){function t(t,n,a,r,i,o,s){e.call(this),this.from=t,this.to=n,this.gapFrom=a,this.gapTo=r,this.slice=i,this.insert=o,this.structure=!!s}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.apply=function(e){if(this.structure&&(g(e,this.from,this.gapFrom)||g(e,this.gapTo,this.to)))return h.fail("Structure gap-replace would overwrite content");var t=e.slice(this.gapFrom,this.gapTo);if(t.openStart||t.openEnd)return h.fail("Gap is not a flat range");var n=this.slice.insertAt(this.insert,t.content);return n?h.fromReplace(e,this.from,this.to,n):h.fail("Content does not fit in gap")},t.prototype.getMap=function(){return new s([this.from,this.gapFrom-this.from,this.insert,this.gapTo,this.to-this.gapTo,this.slice.size-this.insert])},t.prototype.invert=function(e){var n=this.gapTo-this.gapFrom;return new t(this.from,this.from+this.slice.size+n,this.from+this.insert,this.from+this.insert+n,e.slice(this.from,this.to).removeBetween(this.gapFrom-this.from,this.gapTo-this.from),this.gapFrom-this.from,this.structure)},t.prototype.map=function(e){var n=e.mapResult(this.from,1),a=e.mapResult(this.to,-1),r=e.map(this.gapFrom,-1),i=e.map(this.gapTo,1);return n.deleted&&a.deleted||ra.pos?null:new t(n.pos,a.pos,r,i,this.slice,this.insert,this.structure)},t.prototype.toJSON=function(){var e={stepType:"replaceAround",from:this.from,to:this.to,gapFrom:this.gapFrom,gapTo:this.gapTo,insert:this.insert};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e},t.fromJSON=function(e,n){if("number"!=typeof n.from||"number"!=typeof n.to||"number"!=typeof n.gapFrom||"number"!=typeof n.gapTo||"number"!=typeof n.insert)throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON");return new t(n.from,n.to,n.gapFrom,n.gapTo,a.Slice.fromJSON(e,n.slice),n.insert,!!n.structure)},t}(f);function g(e,t,n){for(var a=e.resolve(t),r=n-t,i=a.depth;r>0&&i>0&&a.indexAfter(i)==a.node(i).childCount;)i--,r--;if(r>0)for(var o=a.node(i).maybeChild(a.indexAfter(i));r>0;){if(!o||o.isLeaf)return!0;o=o.firstChild,r--}return!1}function y(e,t,n){return(0==t||e.canReplace(t,e.childCount))&&(n==e.childCount||e.canReplace(0,n))}function b(e){for(var t=e.parent.content.cutByIndex(e.startIndex,e.endIndex),n=e.depth;;--n){var a=e.$from.node(n),r=e.$from.index(n),i=e.$to.indexAfter(n);if(ni;s--,l--){var c=r.node(s),d=r.index(s);if(c.type.spec.isolating)return!1;var u=c.content.cutByIndex(d,c.childCount),p=a&&a[l]||c;if(p!=c&&(u=u.replaceChild(0,p.type.create(p.attrs))),!c.canReplace(d+1,c.childCount)||!p.type.validContent(u))return!1}var m=r.indexAfter(i),f=a&&a[0];return r.node(i).canReplaceWith(m,m,f?f.type:r.node(i+1).type)}function D(e,t){var n=e.resolve(t),a=n.index();return M(n.nodeBefore,n.nodeAfter)&&n.parent.canReplace(a,a+1)}function M(e,t){return e&&t&&!e.isLeaf&&e.canAppend(t)}function S(e,t,n){void 0===n&&(n=-1);for(var a=e.resolve(t),r=a.depth;;r--){var i=void 0,o=void 0,s=a.index(r);if(r==a.depth?(i=a.nodeBefore,o=a.nodeAfter):n>0?(i=a.node(r+1),s++,o=a.node(r).maybeChild(s)):(i=a.node(r).maybeChild(s-1),o=a.node(r+1)),i&&!i.isTextblock&&M(i,o)&&a.node(r).canReplace(s,s+1))return t;if(0==r)break;t=n<0?a.before(r):a.after(r)}}function C(e,t,n){var a=e.resolve(t);if(!n.content.size)return t;for(var r=n.content,i=0;i=0;s--){var l=s==a.depth?0:a.pos<=(a.start(s+1)+a.end(s+1))/2?-1:1,c=a.index(s)+(l>0?1:0);if(1==o?a.node(s).canReplace(c,c,r):a.node(s).contentMatchAt(c).findWrapping(r.firstChild.type))return 0==l?a.pos:l<0?a.before(s+1):a.after(s+1)}return null}function L(e,t,n){for(var r=[],i=0;it;p--)m||n.index(p)>0?(m=!0,d=a.Fragment.from(n.node(p).copy(d)),u++):l--;for(var f=a.Fragment.empty,h=0,_=i,g=!1;_>t;_--)g||r.after(_+1)=0;r--)n=a.Fragment.from(t[r].type.create(t[r].attrs,n));var i=e.start,o=e.end;return this.step(new v(i,o,i,o,new a.Slice(n,0,0),t.length,!0))},d.prototype.setBlockType=function(e,t,n,r){var i=this;if(void 0===t&&(t=e),!n.isTextblock)throw new RangeError("Type given to setBlockType should be a textblock");var o=this.steps.length;return this.doc.nodesBetween(e,t,(function(e,t){if(e.isTextblock&&!e.hasMarkup(n,r)&&function(e,t,n){var a=e.resolve(t),r=a.index();return a.parent.canReplaceWith(r,r+1,n)}(i.doc,i.mapping.slice(o).map(t),n)){i.clearIncompatible(i.mapping.slice(o).map(t,1),n);var s=i.mapping.slice(o),l=s.map(t,1),c=s.map(t+e.nodeSize,1);return i.step(new v(l,c,l+1,c-1,new a.Slice(a.Fragment.from(n.create(r,null,e.marks)),0,0),1,!0)),!1}})),this},d.prototype.setNodeMarkup=function(e,t,n,r){var i=this.doc.nodeAt(e);if(!i)throw new RangeError("No node at given position");t||(t=i.type);var o=t.create(n,null,r||i.marks);if(i.isLeaf)return this.replaceWith(e,e+i.nodeSize,o);if(!t.validContent(i.content))throw new RangeError("Invalid content for node type "+t.name);return this.step(new v(e,e+i.nodeSize,e+1,e+i.nodeSize-1,new a.Slice(a.Fragment.from(o),0,0),1,!0))},d.prototype.split=function(e,t,n){void 0===t&&(t=1);for(var r=this.doc.resolve(e),i=a.Fragment.empty,o=a.Fragment.empty,s=r.depth,l=r.depth-t,c=t-1;s>l;s--,c--){i=a.Fragment.from(r.node(s).copy(i));var d=n&&n[c];o=a.Fragment.from(d?d.type.create(d.attrs,o):r.node(s).copy(o))}return this.step(new _(e,e,new a.Slice(i.append(o),t,t),!0))},d.prototype.join=function(e,t){void 0===t&&(t=1);var n=new _(e-t,e+t,a.Slice.empty,!0);return this.step(n)};var T=function(e){function t(t,n,a){e.call(this),this.from=t,this.to=n,this.mark=a}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.apply=function(e){var t=this,n=e.slice(this.from,this.to),r=e.resolve(this.from),i=r.node(r.sharedDepth(this.to)),o=new a.Slice(L(n.content,(function(e,n){return n.type.allowsMarkType(t.mark.type)?e.mark(t.mark.addToSet(e.marks)):e}),i),n.openStart,n.openEnd);return h.fromReplace(e,this.from,this.to,o)},t.prototype.invert=function(){return new O(this.from,this.to,this.mark)},t.prototype.map=function(e){var n=e.mapResult(this.from,1),a=e.mapResult(this.to,-1);return n.deleted&&a.deleted||n.pos>=a.pos?null:new t(n.pos,a.pos,this.mark)},t.prototype.merge=function(e){if(e instanceof t&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from)return new t(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark)},t.prototype.toJSON=function(){return{stepType:"addMark",mark:this.mark.toJSON(),from:this.from,to:this.to}},t.fromJSON=function(e,n){if("number"!=typeof n.from||"number"!=typeof n.to)throw new RangeError("Invalid input for AddMarkStep.fromJSON");return new t(n.from,n.to,e.markFromJSON(n.mark))},t}(f);f.jsonID("addMark",T);var O=function(e){function t(t,n,a){e.call(this),this.from=t,this.to=n,this.mark=a}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.apply=function(e){var t=this,n=e.slice(this.from,this.to),r=new a.Slice(L(n.content,(function(e){return e.mark(t.mark.removeFromSet(e.marks))})),n.openStart,n.openEnd);return h.fromReplace(e,this.from,this.to,r)},t.prototype.invert=function(){return new T(this.from,this.to,this.mark)},t.prototype.map=function(e){var n=e.mapResult(this.from,1),a=e.mapResult(this.to,-1);return n.deleted&&a.deleted||n.pos>=a.pos?null:new t(n.pos,a.pos,this.mark)},t.prototype.merge=function(e){if(e instanceof t&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from)return new t(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark)},t.prototype.toJSON=function(){return{stepType:"removeMark",mark:this.mark.toJSON(),from:this.from,to:this.to}},t.fromJSON=function(e,n){if("number"!=typeof n.from||"number"!=typeof n.to)throw new RangeError("Invalid input for RemoveMarkStep.fromJSON");return new t(n.from,n.to,e.markFromJSON(n.mark))},t}(f);function E(e,t,n){return!n.openStart&&!n.openEnd&&e.start()==t.start()&&e.parent.canReplace(e.index(),t.index(),n.content)}f.jsonID("removeMark",O),d.prototype.addMark=function(e,t,n){var a=this,r=[],i=[],o=null,s=null;return this.doc.nodesBetween(e,t,(function(a,l,c){if(a.isInline){var d=a.marks;if(!n.isInSet(d)&&c.type.allowsMarkType(n.type)){for(var u=Math.max(l,e),p=Math.min(l+a.nodeSize,t),m=n.addToSet(d),f=0;f=0;m--)this.step(i[m]);return this},d.prototype.replace=function(e,t,n){void 0===t&&(t=e),void 0===n&&(n=a.Slice.empty);var r=function(e,t,n,r){if(void 0===n&&(n=t),void 0===r&&(r=a.Slice.empty),t==n&&!r.size)return null;var i=e.resolve(t),o=e.resolve(n);return E(i,o,r)?new _(t,n,r):new A(i,o,r).fit()}(this.doc,e,t,n);return r&&this.step(r),this},d.prototype.replaceWith=function(e,t,n){return this.replace(e,t,new a.Slice(a.Fragment.from(n),0,0))},d.prototype.delete=function(e,t){return this.replace(e,t,a.Slice.empty)},d.prototype.insert=function(e,t){return this.replaceWith(e,e,t)};var A=function(e,t,n){this.$to=t,this.$from=e,this.unplaced=n,this.frontier=[];for(var r=0;r<=e.depth;r++){var i=e.node(r);this.frontier.push({type:i.type,match:i.contentMatchAt(e.indexAfter(r))})}this.placed=a.Fragment.empty;for(var o=e.depth;o>0;o--)this.placed=a.Fragment.from(e.node(o).copy(this.placed))},j={depth:{configurable:!0}};function P(e,t,n){return 0==t?e.cutByIndex(n):e.replaceChild(0,e.firstChild.copy(P(e.firstChild.content,t-1,n)))}function $(e,t,n){return 0==t?e.append(n):e.replaceChild(e.childCount-1,e.lastChild.copy($(e.lastChild.content,t-1,n)))}function Y(e,t){for(var n=0;n1&&(r=r.replaceChild(0,z(r.firstChild,t-1,1==r.childCount?n-1:0))),t>0&&(r=e.type.contentMatch.fillBefore(r).append(r),n<=0&&(r=r.append(e.type.contentMatch.matchFragment(r).fillBefore(a.Fragment.empty,!0)))),e.copy(r)}function N(e,t,n,a,r){var i=e.node(t),o=r?e.indexAfter(t):e.index(t);if(o==i.childCount&&!n.compatibleContent(i.type))return null;var s=a.fillBefore(i.content,!0,o);return s&&!function(e,t,n){for(var a=n;ar){var s=i.contentMatchAt(0),l=s.fillBefore(e).append(e);e=l.append(s.matchFragment(l).fillBefore(a.Fragment.empty,!0))}return e}function F(e,t){for(var n=[],a=Math.min(e.depth,t.depth);a>=0;a--){var r=e.start(a);if(rt.pos+(t.depth-a)||e.node(a).type.spec.isolating||t.node(a).type.spec.isolating)break;r==t.start(a)&&n.push(a)}return n}j.depth.get=function(){return this.frontier.length-1},A.prototype.fit=function(){for(;this.unplaced.size;){var e=this.findFittable();e?this.placeNodes(e):this.openMore()||this.dropNode()}var t=this.mustMoveInline(),n=this.placed.size-this.depth-this.$from.depth,r=this.$from,i=this.close(t<0?this.$to:r.doc.resolve(t));if(!i)return null;for(var o=this.placed,s=r.depth,l=i.depth;s&&l&&1==o.childCount;)o=o.firstChild.content,s--,l--;var c=new a.Slice(o,s,l);return t>-1?new v(r.pos,t,this.$to.pos,this.$to.end(),c,n):c.size||r.pos!=this.$to.pos?new _(r.pos,i.pos,c):void 0},A.prototype.findFittable=function(){for(var e=1;e<=2;e++)for(var t=this.unplaced.openStart;t>=0;t--)for(var n=void 0,r=(t?(n=Y(this.unplaced.content,t-1).firstChild).content:this.unplaced.content).firstChild,i=this.depth;i>=0;i--){var o=this.frontier[i],s=o.type,l=o.match,c=void 0,d=void 0;if(1==e&&(r?l.matchType(r.type)||(d=l.fillBefore(a.Fragment.from(r),!1)):s.compatibleContent(n.type)))return{sliceDepth:t,frontierDepth:i,parent:n,inject:d};if(2==e&&r&&(c=l.findWrapping(r.type)))return{sliceDepth:t,frontierDepth:i,parent:n,wrap:c};if(n&&l.matchType(n.type))break}},A.prototype.openMore=function(){var e=this.unplaced,t=e.content,n=e.openStart,r=e.openEnd,i=Y(t,n);return!(!i.childCount||i.firstChild.isLeaf||(this.unplaced=new a.Slice(t,n+1,Math.max(r,i.size+n>=t.size-r?n+1:0)),0))},A.prototype.dropNode=function(){var e=this.unplaced,t=e.content,n=e.openStart,r=e.openEnd,i=Y(t,n);if(i.childCount<=1&&n>0){var o=t.size-n<=n+i.size;this.unplaced=new a.Slice(P(t,n-1,1),n-1,o?n-1:r)}else this.unplaced=new a.Slice(P(t,n,1),n,r)},A.prototype.placeNodes=function(e){for(var t=e.sliceDepth,n=e.frontierDepth,r=e.parent,i=e.inject,o=e.wrap;this.depth>n;)this.closeFrontierNode();if(o)for(var s=0;s1||0==d||g.content.size)&&(f=y,p.push(z(g.mark(h.allowedMarks(g.marks)),1==u?d:0,u==c.childCount?v:-1)))}var b=u==c.childCount;b||(v=-1),this.placed=$(this.placed,n,a.Fragment.from(p)),this.frontier[n].match=f,b&&v<0&&r&&r.type==this.frontier[this.depth].type&&this.frontier.length>1&&this.closeFrontierNode();for(var w=0,x=c;w1&&a==this.$to.end(--n);)++a;return a},A.prototype.findCloseLevel=function(e){e:for(var t=Math.min(this.depth,e.depth);t>=0;t--){var n=this.frontier[t],a=n.match,r=n.type,i=t=0;s--){var l=this.frontier[s],c=l.match,d=N(e,s,l.type,c,!0);if(!d||d.childCount)continue e}return{depth:t,fit:o,move:i?e.doc.resolve(e.after(t+1)):e}}}},A.prototype.close=function(e){var t=this.findCloseLevel(e);if(!t)return null;for(;this.depth>t.depth;)this.closeFrontierNode();t.fit.childCount&&(this.placed=$(this.placed,t.depth,t.fit)),e=t.move;for(var n=t.depth+1;n<=e.depth;n++){var a=e.node(n),r=a.type.contentMatch.fillBefore(a.content,!0,e.index(n));this.openFrontierNode(a.type,a.attrs,r)}return e},A.prototype.openFrontierNode=function(e,t,n){var r=this.frontier[this.depth];r.match=r.match.matchType(e),this.placed=$(this.placed,this.depth,a.Fragment.from(e.create(t,n))),this.frontier.push({type:e,match:e.contentMatch})},A.prototype.closeFrontierNode=function(){var e=this.frontier.pop().match.fillBefore(a.Fragment.empty,!0);e.childCount&&(this.placed=$(this.placed,this.frontier.length,e))},Object.defineProperties(A.prototype,j),d.prototype.replaceRange=function(e,t,n){if(!n.size)return this.deleteRange(e,t);var r=this.doc.resolve(e),i=this.doc.resolve(t);if(E(r,i,n))return this.step(new _(e,t,n));var o=F(r,this.doc.resolve(t));0==o[o.length-1]&&o.pop();var s=-(r.depth+1);o.unshift(s);for(var l=r.depth,c=r.pos-1;l>0;l--,c--){var d=r.node(l).type.spec;if(d.defining||d.isolating)break;o.indexOf(l)>-1?s=l:r.before(l)==c&&o.splice(1,0,-l)}for(var u=o.indexOf(s),p=[],m=n.openStart,f=n.content,h=0;;h++){var v=f.firstChild;if(p.push(v),h==n.openStart)break;f=v.content}m>0&&p[m-1].type.spec.defining&&r.node(u).type!=p[m-1].type?m-=1:m>=2&&p[m-1].isTextblock&&p[m-2].type.spec.defining&&r.node(u).type!=p[m-2].type&&(m-=2);for(var g=n.openStart;g>=0;g--){var y=(g+m+1)%(n.openStart+1),b=p[y];if(b)for(var w=0;w=0&&(this.replace(e,t,n),!(this.steps.length>S));C--){var L=o[C];C<0||(e=r.before(L),t=i.after(L))}return this},d.prototype.replaceRangeWith=function(e,t,n){if(!n.isInline&&e==t&&this.doc.resolve(e).parent.content.size){var r=function(e,t,n){var a=e.resolve(t);if(a.parent.canReplaceWith(a.index(),a.index(),n))return t;if(0==a.parentOffset)for(var r=a.depth-1;r>=0;r--){var i=a.index(r);if(a.node(r).canReplaceWith(i,i,n))return a.before(r+1);if(i>0)return null}if(a.parentOffset==a.parent.content.size)for(var o=a.depth-1;o>=0;o--){var s=a.indexAfter(o);if(a.node(o).canReplaceWith(s,s,n))return a.after(o+1);if(s0&&(s||n.node(o-1).canReplace(n.index(o-1),a.indexAfter(o-1))))return this.delete(n.before(o),a.after(o))}for(var l=1;l<=n.depth&&l<=a.depth;l++)if(e-n.start(l)==n.depth-l&&t>n.end(l)&&a.end(l)-t!=a.depth-l)return this.delete(n.before(l),t);return this.delete(e,t)}},"0b07":function(e,t,n){var a=n("34ac"),r=n("3698");e.exports=function(e,t){var n=r(e,t);return a(n)?n:void 0}},"0b19":function(e,t){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},"0bcc":function(e,t,n){var a=n("202a"),r=n("f486")(a);e.exports=r},"0caa":function(e,t,n){!function(e){"use strict";function t(e,t,n,a){var r={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return a?r[n][0]:r[n][1]}e.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,t){switch(t){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,t){return 12===e&&(e=0),"rati"===t?e<4?e:e+12:"sokallim"===t?e:"donparam"===t?e>12?e:e+12:"sanje"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}})}(n("c1df"))},"0cfb":function(e,t,n){var a=n("83ab"),r=n("d039"),i=n("cc12");e.exports=!a&&!r((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},"0d24":function(e,t,n){(function(e){var a=n("2b3e"),r=n("07c7"),i=t&&!t.nodeType&&t,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,s=o&&o.exports===i?a.Buffer:void 0,l=(s?s.isBuffer:void 0)||r;e.exports=l}).call(this,n("62e4")(e))},"0e49":function(e,t,n){!function(e){"use strict";e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}(n("c1df"))},"0e6b":function(e,t,n){!function(e){"use strict";e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:0,doy:4}})}(n("c1df"))},"0e81":function(e,t,n){!function(e){"use strict";var t={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),meridiem:function(e,t,n){return e<12?n?"öö":"ÖÖ":n?"ös":"ÖS"},meridiemParse:/öö|ÖÖ|ös|ÖS/,isPM:function(e){return"ös"===e||"ÖS"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,n){switch(n){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var a=e%10,r=e%100-a,i=e>=100?100:null;return e+(t[a]||t[r]||t[i])}},week:{dow:1,doy:7}})}(n("c1df"))},"0ebd":function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},"0f14":function(e,t,n){!function(e){"use strict";e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("c1df"))},"0f38":function(e,t,n){!function(e){"use strict";e.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n("c1df"))},"0ff2":function(e,t,n){!function(e){"use strict";e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("c1df"))},"100e":function(e,t,n){var a=n("cd9d"),r=n("2286"),i=n("c1c9");e.exports=function(e,t){return i(r(e,t,a),e+"")}},1020:function(e,t){function n(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(t){var a=e[t];"object"!=typeof a||Object.isFrozen(a)||n(a)})),e}var a=n,r=n;a.default=r;class i{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function o(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function s(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}function l(e){return e.nodeName.toLowerCase()}var c=Object.freeze({__proto__:null,escapeHTML:o,inherit:s,nodeStream:function(e){const t=[];return function e(n,a){for(let r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?a+=r.nodeValue.length:1===r.nodeType&&(t.push({event:"start",offset:a,node:r}),a=e(r,a),l(r).match(/br|hr|img|input/)||t.push({event:"stop",offset:a,node:r}));return a}(e,0),t},mergeStreams:function(e,t,n){let a=0,r="";const i=[];function s(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function d(e){r+=""}function u(e){("start"===e.event?c:d)(e.node)}for(;e.length||t.length;){let t=s();if(r+=o(n.substring(a,t[0].offset)),a=t[0].offset,t===e){i.reverse().forEach(d);do{u(t.splice(0,1)[0]),t=s()}while(t===e&&t.length&&t[0].offset===a);i.reverse().forEach(c)}else"start"===t[0].event?i.push(t[0].node):i.pop(),u(t.splice(0,1)[0])}return r+o(n.substr(a))}});const d=e=>!!e.kind;class u{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=o(e)}openNode(e){if(!d(e))return;let t=e.kind;e.sublanguage||(t=`${this.classPrefix}${t}`),this.span(t)}closeNode(e){d(e)&&(this.buffer+="")}value(){return this.buffer}span(e){this.buffer+=``}}class p{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t={kind:e,children:[]};this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{p._collapse(e)})))}}class m extends p{constructor(e){super(),this.options=e}addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){return new u(this,this.options).value()}finalize(){return!0}}function f(e){return e?"string"==typeof e?e:e.source:null}const h="[a-zA-Z]\\w*",_="[a-zA-Z_]\\w*",v="\\b\\d+(\\.\\d+)?",g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",y="\\b(0b[01]+)",b={begin:"\\\\[\\s\\S]",relevance:0},w={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[b]},x={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[b]},k={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},D=function(e,t,n={}){const a=s({className:"comment",begin:e,end:t,contains:[]},n);return a.contains.push(k),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},M=D("//","$"),S=D("/\\*","\\*/"),C=D("#","$"),L={className:"number",begin:v,relevance:0},T={className:"number",begin:g,relevance:0},O={className:"number",begin:y,relevance:0},E={className:"number",begin:v+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},A={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[b,{begin:/\[/,end:/\]/,relevance:0,contains:[b]}]}]},j={className:"title",begin:h,relevance:0},P={className:"title",begin:_,relevance:0},$={begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0};var Y=Object.freeze({__proto__:null,IDENT_RE:h,UNDERSCORE_IDENT_RE:_,NUMBER_RE:v,C_NUMBER_RE:g,BINARY_NUMBER_RE:y,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map((e=>f(e))).join("")}(t,/.*\b/,e.binary,/\b.*/)),s({className:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:b,APOS_STRING_MODE:w,QUOTE_STRING_MODE:x,PHRASAL_WORDS_MODE:k,COMMENT:D,C_LINE_COMMENT_MODE:M,C_BLOCK_COMMENT_MODE:S,HASH_COMMENT_MODE:C,NUMBER_MODE:L,C_NUMBER_MODE:T,BINARY_NUMBER_MODE:O,CSS_NUMBER_MODE:E,REGEXP_MODE:A,TITLE_MODE:j,UNDERSCORE_TITLE_MODE:P,METHOD_GUARD:$,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});const z=["of","and","for","in","not","or","if","then","parent","list","value"];function N(e){function t(t,n){return new RegExp(f(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=t(function(e,t="|"){const n=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;let a=0,r="";for(let i=0;i0&&(r+=t),r+="(";s.length>0;){const e=n.exec(s);if(null==e){r+=s;break}r+=s.substring(0,e.index),s=s.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?r+="\\"+String(Number(e[1])+o):(r+=e[0],"("===e[0]&&a++)}r+=")"}return r}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),a=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,a)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}function r(e,t){"."===e.input[e.index-1]&&t.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=s(e.classNameAliases||{}),function n(i,o){const l=i;if(i.compiled)return l;i.compiled=!0,i.__beforeBegin=null,i.keywords=i.keywords||i.beginKeywords;let c=null;if("object"==typeof i.keywords&&(c=i.keywords.$pattern,delete i.keywords.$pattern),i.keywords&&(i.keywords=function(e,t){const n={};return"string"==typeof e?a("keyword",e):Object.keys(e).forEach((function(t){a(t,e[t])})),n;function a(e,a){t&&(a=a.toLowerCase()),a.split(" ").forEach((function(t){const a=t.split("|");n[a[0]]=[e,F(a[0],a[1])]}))}}(i.keywords,e.case_insensitive)),i.lexemes&&c)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=t(i.lexemes||c||/\w+/,!0),o&&(i.beginKeywords&&(i.begin="\\b("+i.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",i.__beforeBegin=r),i.begin||(i.begin=/\B|\b/),l.beginRe=t(i.begin),i.endSameAsBegin&&(i.end=i.begin),i.end||i.endsWithParent||(i.end=/\B|\b/),i.end&&(l.endRe=t(i.end)),l.terminator_end=f(i.end)||"",i.endsWithParent&&o.terminator_end&&(l.terminator_end+=(i.end?"|":"")+o.terminator_end)),i.illegal&&(l.illegalRe=t(i.illegal)),void 0===i.relevance&&(i.relevance=1),i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(t){return s(e,{variants:null},t)}))),e.cached_variants?e.cached_variants:I(e)?s(e,{starts:e.starts?s(e.starts):null}):Object.isFrozen(e)?s(e):e}("self"===e?i:e)}))),i.contains.forEach((function(e){n(e,l)})),i.starts&&n(i.starts,o),l.matcher=function(e){const t=new a;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"}))),e.terminator_end&&t.addRule(e.terminator_end,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(l),l}(e)}function I(e){return!!e&&(e.endsWithParent||I(e.starts))}function F(e,t){return t?Number(t):function(e){return z.includes(e.toLowerCase())}(e)?0:1}function H(e){const t={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,o(this.code);let t;return this.autoDetect?(t=e.highlightAuto(this.code),this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),t.value},autoDetect(){return!this.language||(e=this.autodetect,Boolean(e||""===e));var e},ignoreIllegals:()=>!0},render(e){return e("pre",{},[e("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:t,VuePlugin:{install(e){e.component("highlightjs",t)}}}}const R=o,B=s,{nodeStream:q,mergeStreams:V}=c,W=Symbol("nomatch");var U=function(e){const t=[],n=Object.create(null),r=Object.create(null),o=[];let s=!0;const l=/(^(<[^>]+>|\t|)+|\n)/gm,c="Could not find the language '{}', did you forget to load/include a language module?",d={disableAutodetect:!0,name:"Plain text",contains:[]};let u={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:m};function p(e){return u.noHighlightRe.test(e)}function f(e,t,n,a){const r={code:t,language:e};k("before:highlight",r);const i=r.result?r.result:h(r.language,r.code,n,a);return i.code=r.code,k("after:highlight",i),i}function h(e,t,a,r){const o=t;function l(e,t){const n=x.case_insensitive?t[0].toLowerCase():t[0];return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]}function d(){null!=M.subLanguage?function(){if(""===L)return;let e=null;if("string"==typeof M.subLanguage){if(!n[M.subLanguage])return void C.addText(L);e=h(M.subLanguage,L,!0,S[M.subLanguage]),S[M.subLanguage]=e.top}else e=_(L,M.subLanguage.length?M.subLanguage:null);M.relevance>0&&(T+=e.relevance),C.addSublanguage(e.emitter,e.language)}():function(){if(!M.keywords)return void C.addText(L);let e=0;M.keywordPatternRe.lastIndex=0;let t=M.keywordPatternRe.exec(L),n="";for(;t;){n+=L.substring(e,t.index);const a=l(M,t);if(a){const[e,r]=a;C.addText(n),n="",T+=r;const i=x.classNameAliases[e]||e;C.addKeyword(t[0],i)}else n+=t[0];e=M.keywordPatternRe.lastIndex,t=M.keywordPatternRe.exec(L)}n+=L.substr(e),C.addText(n)}(),L=""}function p(e){return e.className&&C.openNode(x.classNameAliases[e.className]||e.className),M=Object.create(e,{parent:{value:M}}),M}function m(e,t,n){let a=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(a){if(e["on:end"]){const n=new i(e);e["on:end"](t,n),n.ignore&&(a=!1)}if(a){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return m(e.parent,t,n)}function f(e){return 0===M.matcher.regexIndex?(L+=e[0],1):(A=!0,0)}function v(e){const t=e[0],n=e.rule,a=new i(n),r=[n.__beforeBegin,n["on:begin"]];for(const n of r)if(n&&(n(e,a),a.ignore))return f(t);return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),n.skip?L+=t:(n.excludeBegin&&(L+=t),d(),n.returnBegin||n.excludeBegin||(L=t)),p(n),n.returnBegin?0:t.length}function g(e){const t=e[0],n=o.substr(e.index),a=m(M,e,n);if(!a)return W;const r=M;r.skip?L+=t:(r.returnEnd||r.excludeEnd||(L+=t),d(),r.excludeEnd&&(L=t));do{M.className&&C.closeNode(),M.skip||M.subLanguage||(T+=M.relevance),M=M.parent}while(M!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),p(a.starts)),r.returnEnd?0:t.length}let y={};function w(t,n){const r=n&&n[0];if(L+=t,null==r)return d(),0;if("begin"===y.type&&"end"===n.type&&y.index===n.index&&""===r){if(L+=o.slice(n.index,n.index+1),!s){const t=new Error("0 width match regex");throw t.languageName=e,t.badRule=y.rule,t}return 1}if(y=n,"begin"===n.type)return v(n);if("illegal"===n.type&&!a){const e=new Error('Illegal lexeme "'+r+'" for mode "'+(M.className||"")+'"');throw e.mode=M,e}if("end"===n.type){const e=g(n);if(e!==W)return e}if("illegal"===n.type&&""===r)return 1;if(E>1e5&&E>3*n.index)throw new Error("potential infinite loop, way more iterations than matches");return L+=r,r.length}const x=b(e);if(!x)throw console.error(c.replace("{}",e)),new Error('Unknown language: "'+e+'"');const k=N(x);let D="",M=r||k;const S={},C=new u.__emitter(u);!function(){const e=[];for(let t=M;t!==x;t=t.parent)t.className&&e.unshift(t.className);e.forEach((e=>C.openNode(e)))}();let L="",T=0,O=0,E=0,A=!1;try{for(M.matcher.considerAll();;){E++,A?A=!1:M.matcher.considerAll(),M.matcher.lastIndex=O;const e=M.matcher.exec(o);if(!e)break;const t=w(o.substring(O,e.index),e);O=e.index+t}return w(o.substr(O)),C.closeAllNodes(),C.finalize(),D=C.toHTML(),{relevance:T,value:D,language:e,illegal:!1,emitter:C,top:M}}catch(t){if(t.message&&t.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:t.message,context:o.slice(O-100,O+100),mode:t.mode},sofar:D,relevance:0,value:R(o),emitter:C};if(s)return{illegal:!1,relevance:0,value:R(o),emitter:C,language:e,top:M,errorRaised:t};throw t}}function _(e,t){t=t||u.languages||Object.keys(n);const a=function(e){const t={relevance:0,emitter:new u.__emitter(u),value:R(e),illegal:!1,top:d};return t.emitter.addText(e),t}(e),r=t.filter(b).filter(x).map((t=>h(t,e,!1)));r.unshift(a);const i=r.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(b(e.language).supersetOf===t.language)return 1;if(b(t.language).supersetOf===e.language)return-1}return 0})),[o,s]=i,l=o;return l.second_best=s,l}function v(e){return u.tabReplace||u.useBR?e.replace(l,(e=>"\n"===e?u.useBR?"
":e:u.tabReplace?e.replace(/\t/g,u.tabReplace):e)):e}function g(e){let t=null;const n=function(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=u.languageDetectRe.exec(t);if(n){const t=b(n[1]);return t||(console.warn(c.replace("{}",n[1])),console.warn("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>p(e)||b(e)))}(e);if(p(n))return;k("before:highlightBlock",{block:e,language:n}),u.useBR?(t=document.createElement("div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;const a=t.textContent,i=n?f(n,a,!0):_(a),o=q(t);if(o.length){const e=document.createElement("div");e.innerHTML=i.value,i.value=V(o,q(e),a)}i.value=v(i.value),k("after:highlightBlock",{block:e,result:i}),e.innerHTML=i.value,e.className=function(e,t,n){const a=t?r[t]:n,i=[e.trim()];return e.match(/\bhljs\b/)||i.push("hljs"),e.includes(a)||i.push(a),i.join(" ").trim()}(e.className,n,i.language),e.result={language:i.language,re:i.relevance,relavance:i.relevance},i.second_best&&(e.second_best={language:i.second_best.language,re:i.second_best.relevance,relavance:i.second_best.relevance})}const y=()=>{if(y.called)return;y.called=!0;const e=document.querySelectorAll("pre code");t.forEach.call(e,g)};function b(e){return e=(e||"").toLowerCase(),n[e]||n[r[e]]}function w(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{r[e]=t}))}function x(e){const t=b(e);return t&&!t.disableAutodetect}function k(e,t){const n=e;o.forEach((function(e){e[n]&&e[n](t)}))}Object.assign(e,{highlight:f,highlightAuto:_,fixMarkup:function(e){return console.warn("fixMarkup is deprecated and will be removed entirely in v11.0"),console.warn("Please see https://github.com/highlightjs/highlight.js/issues/2534"),v(e)},highlightBlock:g,configure:function(e){e.useBR&&(console.warn("'useBR' option is deprecated and will be removed entirely in v11.0"),console.warn("Please see https://github.com/highlightjs/highlight.js/issues/2559")),u=B(u,e)},initHighlighting:y,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",y,!1)},registerLanguage:function(t,a){let r=null;try{r=a(e)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",t)),!s)throw e;console.error(e),r=d}r.name||(r.name=t),n[t]=r,r.rawDefinition=a.bind(null,e),r.aliases&&w(r.aliases,{languageName:t})},listLanguages:function(){return Object.keys(n)},getLanguage:b,registerAliases:w,requireLanguage:function(e){console.warn("requireLanguage is deprecated and will be removed entirely in the future."),console.warn("Please see https://github.com/highlightjs/highlight.js/pull/2844");const t=b(e);if(t)return t;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:x,inherit:B,addPlugin:function(e){o.push(e)},vuePlugin:H(e).VuePlugin}),e.debugMode=function(){s=!1},e.safeMode=function(){s=!0},e.versionString="10.4.0";for(const e in Y)"object"==typeof Y[e]&&a(Y[e]);return Object.assign(e,Y),e}({});e.exports=U},"10e8":function(e,t,n){!function(e){"use strict";e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,t,n){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",w:"1 สัปดาห์",ww:"%d สัปดาห์",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n("c1df"))},1276:function(e,t,n){"use strict";var a=n("d784"),r=n("44e7"),i=n("825a"),o=n("1d80"),s=n("4840"),l=n("8aa5"),c=n("50c4"),d=n("14c3"),u=n("9263"),p=n("d039"),m=[].push,f=Math.min,h=4294967295,_=!p((function(){return!RegExp(h,"y")}));a("split",2,(function(e,t,n){var a;return a="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var a=String(o(this)),i=void 0===n?h:n>>>0;if(0===i)return[];if(void 0===e)return[a];if(!r(e))return t.call(a,e,i);for(var s,l,c,d=[],p=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),f=0,_=new RegExp(e.source,p+"g");(s=u.call(_,a))&&!((l=_.lastIndex)>f&&(d.push(a.slice(f,s.index)),s.length>1&&s.index=i));)_.lastIndex===s.index&&_.lastIndex++;return f===a.length?!c&&_.test("")||d.push(""):d.push(a.slice(f)),d.length>i?d.slice(0,i):d}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var r=o(this),i=null==t?void 0:t[e];return void 0!==i?i.call(t,r,n):a.call(String(r),t,n)},function(e,r){var o=n(a,e,this,r,a!==t);if(o.done)return o.value;var u=i(e),p=String(this),m=s(u,RegExp),v=u.unicode,g=(u.ignoreCase?"i":"")+(u.multiline?"m":"")+(u.unicode?"u":"")+(_?"y":"g"),y=new m(_?u:"^(?:"+u.source+")",g),b=void 0===r?h:r>>>0;if(0===b)return[];if(0===p.length)return null===d(y,p)?[p]:[];for(var w=0,x=0,k=[];x79&&s<83},{reduce:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},"13e9":function(e,t,n){!function(e){"use strict";var t={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,a){var r=t.words[a];return 1===a.length?n?r[0]:r[1]:e+" "+t.correctGrammaticalCase(e,r)}};e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"дан",dd:t.translate,M:"месец",MM:t.translate,y:"годину",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("c1df"))},"14c3":function(e,t,n){var a=n("c6b6"),r=n("9263");e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var i=n.call(e,t);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==a(e))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},1501:function(e,t,n){var a=n("902a")(Object,"create");e.exports=a},"159b":function(e,t,n){var a=n("da84"),r=n("fdbc"),i=n("17c2"),o=n("9112");for(var s in r){var l=a[s],c=l&&l.prototype;if(c&&c.forEach!==i)try{o(c,"forEach",i)}catch(e){c.forEach=i}}},1653:function(e,t){e.exports=function(e,t){for(var n=-1,a=t.length,r=e.length;++n1?arguments[1]:void 0)}},"193e":function(e,t,n){var a=n("f6d2"),r=n("d94e"),i=n("906b"),o=n("b1bc"),s=n("30ad");function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=3&&e%100<=10?3:e%100>=11?4:5},a={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},r=function(e){return function(t,r,i,o){var s=n(t),l=a[e][n(t)];return 2===s&&(l=l[r?0:1]),l.replace(/%d/i,t)}},i=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar-ly",{months:i,monthsShort:i,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n("c1df"))},"1d80":function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},"1dde":function(e,t,n){var a=n("d039"),r=n("b622"),i=n("2d00"),o=r("species");e.exports=function(e){return i>=51||!a((function(){var t=[];return(t.constructor={})[o]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},"1ea7":function(e,t,n){var a=n("210a"),r=n("193e"),i=n("d3c7");e.exports=function(){this.size=0,this.__data__={hash:new a,map:new(i||r),string:new a}}},"1efc":function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},"1f55":function(e,t,n){var a=n("74d4"),r=n("4472");e.exports=function(e){return a(e,r(e))}},"1fc1":function(e,t,n){!function(e){"use strict";function t(e,t){var n=e.split("_");return t%10==1&&t%100!=11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function n(e,n,a){return"m"===a?n?"хвіліна":"хвіліну":"h"===a?n?"гадзіна":"гадзіну":e+" "+t({ss:n?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:n?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:n?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"}[a],+e)}e.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:n,mm:n,h:n,hh:n,d:"дзень",dd:n,M:"месяц",MM:n,y:"год",yy:n},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночы":e<12?"раніцы":e<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-ы":e+"-і";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})}(n("c1df"))},"1fc8":function(e,t,n){var a=n("4245");e.exports=function(e,t){var n=a(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}},"201b":function(e,t,n){!function(e){"use strict";e.defineLocale("ka",{months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,(function(e,t,n){return"ი"===n?t+"ში":t+n+"ში"}))},past:function(e){return/(წამი|წუთი|საათი|დღე|თვე)/.test(e)?e.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(e)?e.replace(/წელი$/,"წლის წინ"):e},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(e){return 0===e?e:1===e?e+"-ლი":e<20||e<=100&&e%20==0||e%100==0?"მე-"+e:e+"-ე"},week:{dow:1,doy:7}})}(n("c1df"))},"202a":function(e,t,n){var a=n("c796"),r=n("1bc6"),i=n("a628"),o=r?function(e,t){return r(e,"toString",{configurable:!0,enumerable:!1,value:a(t),writable:!0})}:i;e.exports=o},"210a":function(e,t,n){var a=n("abdd"),r=n("fc88"),i=n("8300"),o=n("2fe8"),s=n("8459");function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++tp;p++)if((f=k(e[p]))&&f instanceof c)return f;return new c(!1)}d=u.call(e)}for(h=d.next;!(_=h.call(d)).done;){try{f=k(_.value)}catch(e){throw l(d),e}if("object"==typeof f&&f&&f instanceof c)return f}return new c(!1)}},2286:function(e,t,n){var a=n("85e3"),r=Math.max;e.exports=function(e,t,n){return t=r(void 0===t?e.length-1:t,0),function(){for(var i=arguments,o=-1,s=r(i.length-t,0),l=Array(s);++o0)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);if(e.indexOf("Trident/")>0){var n=e.indexOf("rv:");return parseInt(e.substring(n+3,e.indexOf(".",n)),10)}var a=e.indexOf("Edge/");return a>0?parseInt(e.substring(a+5,e.indexOf(".",a)),10):-1}())}function i(e,t,n,a,r,i,o,s,l,c){"boolean"!=typeof o&&(l=s,s=o,o=!1);var d,u="function"==typeof n?n.options:n;if(e&&e.render&&(u.render=e.render,u.staticRenderFns=e.staticRenderFns,u._compiled=!0,r&&(u.functional=!0)),a&&(u._scopeId=a),i?(d=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=d):t&&(d=o?function(e){t.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,s(e))}),d)if(u.functional){var p=u.render;u.render=function(e,t){return d.call(t),p(e,t)}}else{var m=u.beforeCreate;u.beforeCreate=m?[].concat(m,d):[d]}return n}n.d(t,"a",(function(){return l}));var o={name:"ResizeObserver",props:{emitOnMount:{type:Boolean,default:!1},ignoreWidth:{type:Boolean,default:!1},ignoreHeight:{type:Boolean,default:!1}},mounted:function(){var e=this;r(),this.$nextTick((function(){e._w=e.$el.offsetWidth,e._h=e.$el.offsetHeight,e.emitOnMount&&e.emitSize()}));var t=document.createElement("object");this._resizeObject=t,t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex",-1),t.onload=this.addResizeHandlers,t.type="text/html",a&&this.$el.appendChild(t),t.data="about:blank",a||this.$el.appendChild(t)},beforeDestroy:function(){this.removeResizeHandlers()},methods:{compareAndNotify:function(){(!this.ignoreWidth&&this._w!==this.$el.offsetWidth||!this.ignoreHeight&&this._h!==this.$el.offsetHeight)&&(this._w=this.$el.offsetWidth,this._h=this.$el.offsetHeight,this.emitSize())},emitSize:function(){this.$emit("notify",{width:this._w,height:this._h})},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener("resize",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject&&this._resizeObject.onload&&(!a&&this._resizeObject.contentDocument&&this._resizeObject.contentDocument.defaultView.removeEventListener("resize",this.compareAndNotify),this.$el.removeChild(this._resizeObject),this._resizeObject.onload=null,this._resizeObject=null)}}},s=function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"resize-observer",attrs:{tabindex:"-1"}})};s._withStripped=!0;var l=i({render:s,staticRenderFns:[]},void 0,o,"data-v-8859cc6c",!1,void 0,!1,void 0,void 0,void 0),c={version:"1.0.1",install:function(e){e.component("resize-observer",l),e.component("ResizeObserver",l)}},d=null;"undefined"!=typeof window?d=window.Vue:void 0!==e&&(d=e.Vue),d&&d.use(c)}).call(this,n("c8ba"))},2532:function(e,t,n){"use strict";var a=n("23e7"),r=n("5a34"),i=n("1d80");a({target:"String",proto:!0,forced:!n("ab13")("includes")},{includes:function(e){return!!~String(i(this)).indexOf(r(e),arguments.length>1?arguments[1]:void 0)}})},"253c":function(e,t,n){var a=n("3729"),r=n("1310");e.exports=function(e){return r(e)&&"[object Arguments]"==a(e)}},2554:function(e,t,n){!function(e){"use strict";function t(e,t,n){var a=e+" ";switch(n){case"ss":return a+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return t?"jedna minuta":"jedne minute";case"mm":return a+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return t?"jedan sat":"jednog sata";case"hh":return a+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return a+=1===e?"dan":"dana";case"MM":return a+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return a+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("c1df"))},"25f0":function(e,t,n){"use strict";var a=n("6eeb"),r=n("825a"),i=n("d039"),o=n("ad6d"),s="toString",l=RegExp.prototype,c=l.toString,d=i((function(){return"/a/b"!=c.call({source:"a",flags:"b"})})),u=c.name!=s;(d||u)&&a(RegExp.prototype,s,(function(){var e=r(this),t=String(e.source),n=e.flags;return"/"+t+"/"+String(void 0===n&&e instanceof RegExp&&!("flags"in l)?o.call(e):n)}),{unsafe:!0})},2626:function(e,t,n){"use strict";var a=n("d066"),r=n("9bf2"),i=n("b622"),o=n("83ab"),s=i("species");e.exports=function(e){var t=a(e),n=r.f;o&&t&&!t[s]&&n(t,s,{configurable:!0,get:function(){return this}})}},"26f9":function(e,t,n){!function(e){"use strict";var t={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};function n(e,t,n,a){return t?"kelios sekundės":a?"kelių sekundžių":"kelias sekundes"}function a(e,t,n,a){return t?i(n)[0]:a?i(n)[1]:i(n)[2]}function r(e){return e%10==0||e>10&&e<20}function i(e){return t[e].split("_")}function o(e,t,n,o){var s=e+" ";return 1===e?s+a(e,t,n[0],o):t?s+(r(e)?i(n)[1]:i(n)[0]):o?s+i(n)[1]:s+(r(e)?i(n)[1]:i(n)[2])}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:n,ss:o,m:a,mm:o,h:a,hh:o,d:a,dd:o,M:a,MM:o,y:a,yy:o},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})}(n("c1df"))},"27ea":function(e,t,n){var a=n("a92b"),r=n("ae2d"),i=n("9f66"),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,e.exports=function(e){return i(e)&&r(e.length)&&!!o[a(e)]}},"28c9":function(e,t){e.exports=function(){this.__data__=[],this.size=0}},2921:function(e,t,n){!function(e){"use strict";e.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,t,n){return e<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần trước lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",w:"một tuần",ww:"%d tuần",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n("c1df"))},"293c":function(e,t,n){!function(e){"use strict";var t={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,a){var r=t.words[a];return 1===a.length?n?r[0]:r[1]:e+" "+t.correctGrammaticalCase(e,r)}};e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mjesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("c1df"))},"29f3":function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},"2a62":function(e,t,n){var a=n("825a");e.exports=function(e){var t=e.return;if(void 0!==t)return a(t.call(e)).value}},"2b3e":function(e,t,n){var a=n("585a"),r="object"==typeof self&&self&&self.Object===Object&&self,i=a||r||Function("return this")();e.exports=i},"2bef":function(e,t){e.exports=function(e){return function(t){return e(t)}}},"2bfb":function(e,t,n){!function(e){"use strict";e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,t,n){return e<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("c1df"))},"2ca0":function(e,t,n){"use strict";var a,r=n("23e7"),i=n("06cf").f,o=n("50c4"),s=n("5a34"),l=n("1d80"),c=n("ab13"),d=n("c430"),u="".startsWith,p=Math.min,m=c("startsWith");r({target:"String",proto:!0,forced:!(!d&&!m&&(a=i(String.prototype,"startsWith"),a&&!a.writable)||m)},{startsWith:function(e){var t=String(l(this));s(e);var n=o(p(arguments.length>1?arguments[1]:void 0,t.length)),a=String(e);return u?u.call(t,a,n):t.slice(n,n+a.length)===a}})},"2cb6":function(e,t){e.exports=function(e,t){return function(n){return e(t(n))}}},"2cf4":function(e,t,n){var a,r,i,o=n("da84"),s=n("d039"),l=n("0366"),c=n("1be4"),d=n("cc12"),u=n("1cdc"),p=n("605d"),m=o.location,f=o.setImmediate,h=o.clearImmediate,_=o.process,v=o.MessageChannel,g=o.Dispatch,y=0,b={},w="onreadystatechange",x=function(e){if(b.hasOwnProperty(e)){var t=b[e];delete b[e],t()}},k=function(e){return function(){x(e)}},D=function(e){x(e.data)},M=function(e){o.postMessage(e+"",m.protocol+"//"+m.host)};f&&h||(f=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return b[++y]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},a(y),y},h=function(e){delete b[e]},p?a=function(e){_.nextTick(k(e))}:g&&g.now?a=function(e){g.now(k(e))}:v&&!u?(i=(r=new v).port2,r.port1.onmessage=D,a=l(i.postMessage,i,1)):o.addEventListener&&"function"==typeof postMessage&&!o.importScripts&&m&&"file:"!==m.protocol&&!s(M)?(a=M,o.addEventListener("message",D,!1)):a=w in d("script")?function(e){c.appendChild(d("script")).onreadystatechange=function(){c.removeChild(this),x(e)}}:function(e){setTimeout(k(e),0)}),e.exports={set:f,clear:h}},"2d00":function(e,t,n){var a,r,i=n("da84"),o=n("342f"),s=i.process,l=s&&s.versions,c=l&&l.v8;c?r=(a=c.split("."))[0]+a[1]:o&&(!(a=o.match(/Edge\/(\d+)/))||a[1]>=74)&&(a=o.match(/Chrome\/(\d+)/))&&(r=a[1]),e.exports=r&&+r},"2dcb":function(e,t,n){var a=n("91e9")(Object.getPrototypeOf,Object);e.exports=a},"2e8c":function(e,t,n){!function(e){"use strict";e.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n("c1df"))},"2ec1":function(e,t,n){var a=n("100e"),r=n("9aff");e.exports=function(e){return a((function(t,n){var a=-1,i=n.length,o=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(i--,o):void 0,s&&r(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),t=Object(t);++a>1}},a.from=function(e){if(e instanceof a)return e;var t=[];if(e)for(var n in e)t.push(n,e[n]);return new a(t)};var r=a;function i(e,t,n){for(var a=0;;a++){if(a==e.childCount||a==t.childCount)return e.childCount==t.childCount?null:n;var r=e.child(a),o=t.child(a);if(r!=o){if(!r.sameMarkup(o))return n;if(r.isText&&r.text!=o.text){for(var s=0;r.text[s]==o.text[s];s++)n++;return n}if(r.content.size||o.content.size){var l=i(r.content,o.content,n+1);if(null!=l)return l}n+=r.nodeSize}else n+=r.nodeSize}}function o(e,t,n,a){for(var r=e.childCount,i=t.childCount;;){if(0==r||0==i)return r==i?null:{a:n,b:a};var s=e.child(--r),l=t.child(--i),c=s.nodeSize;if(s!=l){if(!s.sameMarkup(l))return{a:n,b:a};if(s.isText&&s.text!=l.text){for(var d=0,u=Math.min(s.text.length,l.text.length);de&&!1!==n(s,a+o,r,i)&&s.content.size){var c=o+1;s.nodesBetween(Math.max(0,e-c),Math.min(s.content.size,t-c),n,a+c)}o=l}},s.prototype.descendants=function(e){this.nodesBetween(0,this.size,e)},s.prototype.textBetween=function(e,t,n,a){var r="",i=!0;return this.nodesBetween(e,t,(function(o,s){o.isText?(r+=o.text.slice(Math.max(e,s)-s,t-s),i=!n):o.isLeaf&&a?(r+=a,i=!n):!i&&o.isBlock&&(r+=n,i=!0)}),0),r},s.prototype.append=function(e){if(!e.size)return this;if(!this.size)return e;var t=this.lastChild,n=e.firstChild,a=this.content.slice(),r=0;for(t.isText&&t.sameMarkup(n)&&(a[a.length-1]=t.withText(t.text+n.text),r=1);re)for(var r=0,i=0;ie&&((it)&&(o=o.isText?o.cut(Math.max(0,e-i),Math.min(o.text.length,t-i)):o.cut(Math.max(0,e-i-1),Math.min(o.content.size,t-i-1))),n.push(o),a+=o.nodeSize),i=l}return new s(n,a)},s.prototype.cutByIndex=function(e,t){return e==t?s.empty:0==e&&t==this.content.length?this:new s(this.content.slice(e,t))},s.prototype.replaceChild=function(e,t){var n=this.content[e];if(n==t)return this;var a=this.content.slice(),r=this.size+t.nodeSize-n.nodeSize;return a[e]=t,new s(a,r)},s.prototype.addToStart=function(e){return new s([e].concat(this.content),this.size+e.nodeSize)},s.prototype.addToEnd=function(e){return new s(this.content.concat(e),this.size+e.nodeSize)},s.prototype.eq=function(e){if(this.content.length!=e.content.length)return!1;for(var t=0;tthis.size||e<0)throw new RangeError("Position "+e+" outside of fragment ("+this+")");for(var n=0,a=0;;n++){var r=a+this.child(n).nodeSize;if(r>=e)return r==e||t>0?d(n+1,r):d(n,a);a=r}},s.prototype.toString=function(){return"<"+this.toStringInner()+">"},s.prototype.toStringInner=function(){return this.content.join(", ")},s.prototype.toJSON=function(){return this.content.length?this.content.map((function(e){return e.toJSON()})):null},s.fromJSON=function(e,t){if(!t)return s.empty;if(!Array.isArray(t))throw new RangeError("Invalid input for Fragment.fromJSON");return new s(t.map(e.nodeFromJSON))},s.fromArray=function(e){if(!e.length)return s.empty;for(var t,n=0,a=0;athis.type.rank&&(t||(t=e.slice(0,a)),t.push(this),n=!0),t&&t.push(r)}}return t||(t=e.slice()),n||t.push(this),t},p.prototype.removeFromSet=function(e){for(var t=0;te.depth)throw new m("Inserted content deeper than insertion position");if(e.depth-n.openStart!=t.depth-n.openEnd)throw new m("Inconsistent open depths");return y(e,t,n,0)}function y(e,t,n,a){var r=e.index(a),i=e.node(a);if(r==t.index(a)&&a=0;r--)a=t.node(r).copy(s.from(a));return{start:a.resolveNoCache(e.openStart+n),end:a.resolveNoCache(a.content.size-e.openEnd-n)}}(n,e);return D(i,M(e,l.start,l.end,t,a))}var c=e.parent,d=c.content;return D(c,d.cut(0,e.parentOffset).append(n.content).append(d.cut(t.parentOffset)))}return D(i,S(e,t,a))}function b(e,t){if(!t.type.compatibleContent(e.type))throw new m("Cannot join "+t.type.name+" onto "+e.type.name)}function w(e,t,n){var a=e.node(n);return b(a,t.node(n)),a}function x(e,t){var n=t.length-1;n>=0&&e.isText&&e.sameMarkup(t[n])?t[n]=e.withText(t[n].text+e.text):t.push(e)}function k(e,t,n,a){var r=(t||e).node(n),i=0,o=t?t.index(n):r.childCount;e&&(i=e.index(n),e.depth>n?i++:e.textOffset&&(x(e.nodeAfter,a),i++));for(var s=i;sr&&w(e,t,r+1),o=a.depth>r&&w(n,a,r+1),l=[];return k(null,e,r,l),i&&o&&t.index(r)==n.index(r)?(b(i,o),x(D(i,M(e,t,n,a,r+1)),l)):(i&&x(D(i,S(e,t,r+1)),l),k(t,n,r,l),o&&x(D(o,S(n,a,r+1)),l)),k(a,null,r,l),new s(l)}function S(e,t,n){var a=[];return k(null,e,n,a),e.depth>n&&x(D(w(e,t,n+1),S(e,t,n+1)),a),k(t,null,n,a),new s(a)}h.size.get=function(){return this.content.size-this.openStart-this.openEnd},f.prototype.insertAt=function(e,t){var n=v(this.content,e+this.openStart,t,null);return n&&new f(n,this.openStart,this.openEnd)},f.prototype.removeBetween=function(e,t){return new f(_(this.content,e+this.openStart,t+this.openStart),this.openStart,this.openEnd)},f.prototype.eq=function(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd},f.prototype.toString=function(){return this.content+"("+this.openStart+","+this.openEnd+")"},f.prototype.toJSON=function(){if(!this.content.size)return null;var e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e},f.fromJSON=function(e,t){if(!t)return f.empty;var n=t.openStart||0,a=t.openEnd||0;if("number"!=typeof n||"number"!=typeof a)throw new RangeError("Invalid input for Slice.fromJSON");return new f(s.fromJSON(e,t.content),t.openStart||0,t.openEnd||0)},f.maxOpen=function(e,t){void 0===t&&(t=!0);for(var n=0,a=0,r=e.firstChild;r&&!r.isLeaf&&(t||!r.type.spec.isolating);r=r.firstChild)n++;for(var i=e.lastChild;i&&!i.isLeaf&&(t||!i.type.spec.isolating);i=i.lastChild)a++;return new f(e,n,a)},Object.defineProperties(f.prototype,h),f.empty=new f(s.empty,0,0);var C=function(e,t,n){this.pos=e,this.path=t,this.depth=t.length/3-1,this.parentOffset=n},L={parent:{configurable:!0},doc:{configurable:!0},textOffset:{configurable:!0},nodeAfter:{configurable:!0},nodeBefore:{configurable:!0}};C.prototype.resolveDepth=function(e){return null==e?this.depth:e<0?this.depth+e:e},L.parent.get=function(){return this.node(this.depth)},L.doc.get=function(){return this.node(0)},C.prototype.node=function(e){return this.path[3*this.resolveDepth(e)]},C.prototype.index=function(e){return this.path[3*this.resolveDepth(e)+1]},C.prototype.indexAfter=function(e){return e=this.resolveDepth(e),this.index(e)+(e!=this.depth||this.textOffset?1:0)},C.prototype.start=function(e){return 0==(e=this.resolveDepth(e))?0:this.path[3*e-1]+1},C.prototype.end=function(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size},C.prototype.before=function(e){if(!(e=this.resolveDepth(e)))throw new RangeError("There is no position before the top-level node");return e==this.depth+1?this.pos:this.path[3*e-1]},C.prototype.after=function(e){if(!(e=this.resolveDepth(e)))throw new RangeError("There is no position after the top-level node");return e==this.depth+1?this.pos:this.path[3*e-1]+this.path[3*e].nodeSize},L.textOffset.get=function(){return this.pos-this.path[this.path.length-1]},L.nodeAfter.get=function(){var e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;var n=this.pos-this.path[this.path.length-1],a=e.child(t);return n?e.child(t).cut(n):a},L.nodeBefore.get=function(){var e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):0==e?null:this.parent.child(e-1)},C.prototype.marks=function(){var e=this.parent,t=this.index();if(0==e.content.size)return p.none;if(this.textOffset)return e.child(t).marks;var n=e.maybeChild(t-1),a=e.maybeChild(t);if(!n){var r=n;n=a,a=r}for(var i=n.marks,o=0;o0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0},C.prototype.blockRange=function(e,t){if(void 0===e&&(e=this),e.pos=0;n--)if(e.pos<=this.end(n)&&(!t||t(this.node(n))))return new A(this,e,n)},C.prototype.sameParent=function(e){return this.pos-this.parentOffset==e.pos-e.parentOffset},C.prototype.max=function(e){return e.pos>this.pos?e:this},C.prototype.min=function(e){return e.pos=0&&t<=e.content.size))throw new RangeError("Position "+t+" out of range");for(var n=[],a=0,r=t,i=e;;){var o=i.content.findIndex(r),s=o.index,l=o.offset,c=r-l;if(n.push(i,s,a+l),!c)break;if((i=i.child(s)).isText)break;r=c-1,a+=l+1}return new C(t,n,r)},C.resolveCached=function(e,t){for(var n=0;ne&&this.nodesBetween(e,t,(function(e){return n.isInSet(e.marks)&&(a=!0),!a})),a},Y.isBlock.get=function(){return this.type.isBlock},Y.isTextblock.get=function(){return this.type.isTextblock},Y.inlineContent.get=function(){return this.type.inlineContent},Y.isInline.get=function(){return this.type.isInline},Y.isText.get=function(){return this.type.isText},Y.isLeaf.get=function(){return this.type.isLeaf},Y.isAtom.get=function(){return this.type.isAtom},$.prototype.toString=function(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);var e=this.type.name;return this.content.size&&(e+="("+this.content.toStringInner()+")"),N(this.marks,e)},$.prototype.contentMatchAt=function(e){var t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw new Error("Called contentMatchAt on a node with invalid content");return t},$.prototype.canReplace=function(e,t,n,a,r){void 0===n&&(n=s.empty),void 0===a&&(a=0),void 0===r&&(r=n.childCount);var i=this.contentMatchAt(e).matchFragment(n,a,r),o=i&&i.matchFragment(this.content,t);if(!o||!o.validEnd)return!1;for(var l=a;l=0;n--)t=e[n].type.name+"("+t+")";return t}var I=function(e){this.validEnd=e,this.next=[],this.wrapCache=[]},F={inlineContent:{configurable:!0},defaultType:{configurable:!0},edgeCount:{configurable:!0}};I.parse=function(e,t){var n=new H(e,t);if(null==n.next)return I.empty;var a=B(n);n.next&&n.err("Unexpected trailing text");var r=function(e){var t=Object.create(null);return n(Z(e,0));function n(a){var r=[];a.forEach((function(t){e[t].forEach((function(t){var n=t.term,a=t.to;if(n){var i=r.indexOf(n),o=i>-1&&r[i+1];Z(e,a).forEach((function(e){o||r.push(n,o=[]),-1==o.indexOf(e)&&o.push(e)}))}}))}));for(var i=t[a.join(",")]=new I(a.indexOf(e.length-1)>-1),o=0;o>1},I.prototype.edge=function(e){var t=e<<1;if(t>=this.next.length)throw new RangeError("There's no "+e+"th edge in this content match");return{type:this.next[t],next:this.next[t+1]}},I.prototype.toString=function(){var e=[];return function t(n){e.push(n);for(var a=1;a"+e.indexOf(t.next[r+1]);return a})).join("\n")},Object.defineProperties(I.prototype,F),I.empty=new I(!0);var H=function(e,t){this.string=e,this.nodeTypes=t,this.inline=null,this.pos=0,this.tokens=e.split(/\s*(?=\b|\W|$)/),""==this.tokens[this.tokens.length-1]&&this.tokens.pop(),""==this.tokens[0]&&this.tokens.unshift()},R={next:{configurable:!0}};function B(e){var t=[];do{t.push(q(e))}while(e.eat("|"));return 1==t.length?t[0]:{type:"choice",exprs:t}}function q(e){var t=[];do{t.push(V(e))}while(e.next&&")"!=e.next&&"|"!=e.next);return 1==t.length?t[0]:{type:"seq",exprs:t}}function V(e){for(var t=function(e){if(e.eat("(")){var t=B(e);return e.eat(")")||e.err("Missing closing paren"),t}if(!/\W/.test(e.next)){var n=function(e,t){var n=e.nodeTypes,a=n[t];if(a)return[a];var r=[];for(var i in n){var o=n[i];o.groups.indexOf(t)>-1&&r.push(o)}return 0==r.length&&e.err("No node type or group '"+t+"' found"),r}(e,e.next).map((function(t){return null==e.inline?e.inline=t.isInline:e.inline!=t.isInline&&e.err("Mixing inline and block content"),{type:"name",value:t}}));return e.pos++,1==n.length?n[0]:{type:"choice",exprs:n}}e.err("Unexpected token '"+e.next+"'")}(e);;)if(e.eat("+"))t={type:"plus",expr:t};else if(e.eat("*"))t={type:"star",expr:t};else if(e.eat("?"))t={type:"opt",expr:t};else{if(!e.eat("{"))break;t=U(e,t)}return t}function W(e){/\D/.test(e.next)&&e.err("Expected number, got '"+e.next+"'");var t=Number(e.next);return e.pos++,t}function U(e,t){var n=W(e),a=n;return e.eat(",")&&(a="}"!=e.next?W(e):-1),e.eat("}")||e.err("Unclosed braced range"),{type:"range",min:n,max:a,expr:t}}function K(e,t){return t-e}function Z(e,t){var n=[];return function t(a){var r=e[a];if(1==r.length&&!r[0].term)return t(r[0].to);n.push(a);for(var i=0;i-1},Q.prototype.allowsMarks=function(e){if(null==this.markSet)return!0;for(var t=0;t-1};var re=function(e){for(var t in this.spec={},e)this.spec[t]=e[t];this.spec.nodes=r.from(e.nodes),this.spec.marks=r.from(e.marks),this.nodes=Q.compile(this.spec.nodes,this),this.marks=ae.compile(this.spec.marks,this);var n=Object.create(null);for(var a in this.nodes){if(a in this.marks)throw new RangeError(a+" can not be both a node and a mark");var i=this.nodes[a],o=i.spec.content||"",s=i.spec.marks;i.contentMatch=n[o]||(n[o]=I.parse(o,this.nodes)),i.inlineContent=i.contentMatch.inlineContent,i.markSet="_"==s?null:s?ie(this,s.split(" ")):""!=s&&i.inlineContent?null:[]}for(var l in this.marks){var c=this.marks[l],d=c.spec.excludes;c.excluded=null==d?[c]:""==d?[]:ie(this,d.split(" "))}this.nodeFromJSON=this.nodeFromJSON.bind(this),this.markFromJSON=this.markFromJSON.bind(this),this.topNodeType=this.nodes[this.spec.topNode||"doc"],this.cached=Object.create(null),this.cached.wrappings=Object.create(null)};function ie(e,t){for(var n=[],a=0;a-1)&&n.push(o=l)}if(!o)throw new SyntaxError("Unknown mark type: '"+t[a]+"'")}return n}re.prototype.node=function(e,t,n,a){if("string"==typeof e)e=this.nodeType(e);else{if(!(e instanceof Q))throw new RangeError("Invalid node type: "+e);if(e.schema!=this)throw new RangeError("Node type from different schema used ("+e.name+")")}return e.createChecked(t,n,a)},re.prototype.text=function(e,t){var n=this.nodes.text;return new z(n,n.defaultAttrs,e,p.setFrom(t))},re.prototype.mark=function(e,t){return"string"==typeof e&&(e=this.marks[e]),e.create(t)},re.prototype.nodeFromJSON=function(e){return $.fromJSON(this,e)},re.prototype.markFromJSON=function(e){return p.fromJSON(this,e)},re.prototype.nodeType=function(e){var t=this.nodes[e];if(!t)throw new RangeError("Unknown node type: "+e);return t};var oe=function(e,t){var n=this;this.schema=e,this.rules=t,this.tags=[],this.styles=[],t.forEach((function(e){e.tag?n.tags.push(e):e.style&&n.styles.push(e)}))};oe.prototype.parse=function(e,t){void 0===t&&(t={});var n=new pe(this,t,!1);return n.addAll(e,null,t.from,t.to),n.finish()},oe.prototype.parseSlice=function(e,t){void 0===t&&(t={});var n=new pe(this,t,!0);return n.addAll(e,null,t.from,t.to),f.maxOpen(n.finish())},oe.prototype.matchTag=function(e,t){for(var n=0;ne.length&&(61!=r.style.charCodeAt(e.length)||r.style.slice(e.length+1)!=t))){if(r.getAttrs){var i=r.getAttrs(t);if(!1===i)continue;r.attrs=i}return r}}},oe.schemaRules=function(e){var t=[];function n(e){for(var n=null==e.priority?50:e.priority,a=0;a=0;a--){var r=this.nodes[a],i=r.findWrapping(e);if(i&&(!t||t.length>i.length)&&(t=i,n=r,!i.length))break;if(r.solid)break}if(!t)return!1;this.sync(n);for(var o=0;othis.open){for(;t>this.open;t--)this.nodes[t-1].content.push(this.nodes[t].finish(e));this.nodes.length=this.open+1}},pe.prototype.finish=function(){return this.open=0,this.closeExtra(this.isOpen),this.nodes[0].finish(this.isOpen||this.options.topOpen)},pe.prototype.sync=function(e){for(var t=this.open;t>=0;t--)if(this.nodes[t]==e)return void(this.open=t)},me.currentPos.get=function(){this.closeExtra();for(var e=0,t=this.open;t>=0;t--){for(var n=this.nodes[t].content,a=n.length-1;a>=0;a--)e+=n[a].nodeSize;t&&e++}return e},pe.prototype.findAtPoint=function(e,t){if(this.find)for(var n=0;n-1)return e.split(/\s*\|\s*/).some(this.matchesContext,this);var n=e.split("/"),a=this.options.context,r=!(this.isOpen||a&&a.parent.type!=this.nodes[0].type),i=-(a?a.depth+1:0)+(r?0:1),o=function(e,s){for(;e>=0;e--){var l=n[e];if(""==l){if(e==n.length-1||0==e)continue;for(;s>=i;s--)if(o(e-1,s))return!0;return!1}var c=s>0||0==s&&r?t.nodes[s].type:a&&s>=i?a.node(s-i).type:null;if(!c||c.name!=l&&-1==c.groups.indexOf(l))return!1;s--}return!0};return o(n.length-1,this.open)},pe.prototype.textblockFromContext=function(){var e=this.options.context;if(e)for(var t=e.depth;t>=0;t--){var n=e.node(t).contentMatchAt(e.indexAfter(t)).defaultType;if(n&&n.isTextblock&&n.defaultAttrs)return n}for(var a in this.parser.schema.nodes){var r=this.parser.schema.nodes[a];if(r.isTextblock&&r.defaultAttrs)return r}},pe.prototype.addPendingMark=function(e){this.top.pendingMarks=e.addToSet(this.top.pendingMarks)},pe.prototype.removePendingMark=function(e,t){for(var n=this.open;n>=0;n--){var a=this.nodes[n];if(a.pendingMarks.lastIndexOf(e)>-1?a.pendingMarks=e.removeFromSet(a.pendingMarks):a.activeMarks=e.removeFromSet(a.activeMarks),a==t)break}},Object.defineProperties(pe.prototype,me);var ve=function(e,t){this.nodes=e||{},this.marks=t||{}};function ge(e){var t={};for(var n in e){var a=e[n].spec.toDOM;a&&(t[n]=a)}return t}function ye(e){return e.document||window.document}ve.prototype.serializeFragment=function(e,t,n){var a=this;void 0===t&&(t={}),n||(n=ye(t).createDocumentFragment());var r=n,i=null;return e.forEach((function(e){if(i||e.marks.length){i||(i=[]);for(var n=0,o=0;n=0;a--){var r=this.serializeMark(e.marks[a],e.isInline,t);r&&((r.contentDOM||r.dom).appendChild(n),n=r.dom)}return n},ve.prototype.serializeMark=function(e,t,n){void 0===n&&(n={});var a=this.marks[e.type.name];return a&&ve.renderSpec(ye(n),a(e,t))},ve.renderSpec=function(e,t,n){if(void 0===n&&(n=null),"string"==typeof t)return{dom:e.createTextNode(t)};if(null!=t.nodeType)return{dom:t};var a=t[0],r=a.indexOf(" ");r>0&&(n=a.slice(0,r),a=a.slice(r+1));var i=null,o=n?e.createElementNS(n,a):e.createElement(a),s=t[1],l=1;if(s&&"object"==typeof s&&null==s.nodeType&&!Array.isArray(s))for(var c in l=2,s)if(null!=s[c]){var d=c.indexOf(" ");d>0?o.setAttributeNS(c.slice(0,d),c.slice(d+1),s[c]):o.setAttribute(c,s[c])}for(var u=l;ul)throw new RangeError("Content hole must be the only child of its parent node");return{dom:o,contentDOM:o}}var m=ve.renderSpec(e,p,n),f=m.dom,h=m.contentDOM;if(o.appendChild(f),h){if(i)throw new RangeError("Multiple content holes");i=h}}return{dom:o,contentDOM:i}},ve.fromSchema=function(e){return e.cached.domSerializer||(e.cached.domSerializer=new ve(this.nodesFromSchema(e),this.marksFromSchema(e)))},ve.nodesFromSchema=function(e){var t=ge(e.nodes);return t.text||(t.text=function(e){return e.text}),t},ve.marksFromSchema=function(e){return ge(e.marks)}},"30ad":function(e,t,n){var a=n("ed28");e.exports=function(e,t){var n=this.__data__,r=a(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}},"30c9":function(e,t,n){var a=n("9520"),r=n("b218");e.exports=function(e){return null!=e&&r(e.length)&&!a(e)}},"32b3":function(e,t,n){var a=n("872a"),r=n("9638"),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var o=e[t];i.call(e,t)&&r(o,n)&&(void 0!==n||t in e)||a(e,t,n)}},3307:function(e,t,n){var a=n("8aed").Uint8Array;e.exports=a},"342f":function(e,t,n){var a=n("d066");e.exports=a("navigator","userAgent")||""},"34ac":function(e,t,n){var a=n("9520"),r=n("1368"),i=n("1a8c"),o=n("dc57"),s=/^\[object .+?Constructor\]$/,l=Function.prototype,c=Object.prototype,d=l.toString,u=c.hasOwnProperty,p=RegExp("^"+d.call(u).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!i(e)||r(e))&&(a(e)?p:s).test(o(e))}},"35a1":function(e,t,n){var a=n("f5df"),r=n("3f8c"),i=n("b622")("iterator");e.exports=function(e){if(null!=e)return e[i]||e["@@iterator"]||r[a(e)]}},"367c":function(e,t){e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},3698:function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},"36a2":function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},3729:function(e,t,n){var a=n("9e69"),r=n("00fd"),i=n("29f3"),o=a?a.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?r(e):i(e)}},"37e8":function(e,t,n){var a=n("83ab"),r=n("9bf2"),i=n("825a"),o=n("df75");e.exports=a?Object.defineProperties:function(e,t){i(e);for(var n,a=o(t),s=a.length,l=0;s>l;)r.f(e,n=a[l++],t[n]);return e}},3886:function(e,t,n){!function(e){"use strict";e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}(n("c1df"))},"39a6":function(e,t,n){!function(e){"use strict";e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n("c1df"))},"39bd":function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};function a(e,t,n,a){var r="";if(t)switch(n){case"s":r="काही सेकंद";break;case"ss":r="%d सेकंद";break;case"m":r="एक मिनिट";break;case"mm":r="%d मिनिटे";break;case"h":r="एक तास";break;case"hh":r="%d तास";break;case"d":r="एक दिवस";break;case"dd":r="%d दिवस";break;case"M":r="एक महिना";break;case"MM":r="%d महिने";break;case"y":r="एक वर्ष";break;case"yy":r="%d वर्षे"}else switch(n){case"s":r="काही सेकंदां";break;case"ss":r="%d सेकंदां";break;case"m":r="एका मिनिटा";break;case"mm":r="%d मिनिटां";break;case"h":r="एका तासा";break;case"hh":r="%d तासां";break;case"d":r="एका दिवसा";break;case"dd":r="%d दिवसां";break;case"M":r="एका महिन्या";break;case"MM":r="%d महिन्यां";break;case"y":r="एका वर्षा";break;case"yy":r="%d वर्षां"}return r.replace(/%d/i,e)}e.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,meridiemHour:function(e,t){return 12===e&&(e=0),"पहाटे"===t||"सकाळी"===t?e:"दुपारी"===t||"सायंकाळी"===t||"रात्री"===t?e>=12?e:e+12:void 0},meridiem:function(e,t,n){return e>=0&&e<6?"पहाटे":e<12?"सकाळी":e<17?"दुपारी":e<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(n("c1df"))},"3a39":function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};e.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,t){return 12===e&&(e=0),"राति"===t?e<4?e:e+12:"बिहान"===t?e:"दिउँसो"===t?e>=10?e:e+12:"साँझ"===t?e+12:void 0},meridiem:function(e,t,n){return e<3?"राति":e<12?"बिहान":e<16?"दिउँसो":e<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n("c1df"))},"3a6c":function(e,t,n){!function(e){"use strict";e.defineLocale("zh-mo",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"D/M/YYYY",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var a=100*e+t;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n("c1df"))},"3b1b":function(e,t,n){!function(e){"use strict";var t={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"};e.defineLocale("tg",{months:{format:"январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри".split("_"),standalone:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_")},monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Фардо соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(e,t){return 12===e&&(e=0),"шаб"===t?e<4?e:e+12:"субҳ"===t?e:"рӯз"===t?e>=11?e:e+12:"бегоҳ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"шаб":e<11?"субҳ":e<16?"рӯз":e<19?"бегоҳ":"шаб"},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(e){var n=e%10,a=e>=100?100:null;return e+(t[e]||t[n]||t[a])},week:{dow:1,doy:7}})}(n("c1df"))},"3b4a":function(e,t,n){var a=n("0b07"),r=function(){try{var e=a(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=r},"3bbe":function(e,t,n){var a=n("861d");e.exports=function(e){if(!a(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},"3c0d":function(e,t,n){!function(e){"use strict";var t="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),a=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],r=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;function i(e){return e>1&&e<5&&1!=~~(e/10)}function o(e,t,n,a){var r=e+" ";switch(n){case"s":return t||a?"pár sekund":"pár sekundami";case"ss":return t||a?r+(i(e)?"sekundy":"sekund"):r+"sekundami";case"m":return t?"minuta":a?"minutu":"minutou";case"mm":return t||a?r+(i(e)?"minuty":"minut"):r+"minutami";case"h":return t?"hodina":a?"hodinu":"hodinou";case"hh":return t||a?r+(i(e)?"hodiny":"hodin"):r+"hodinami";case"d":return t||a?"den":"dnem";case"dd":return t||a?r+(i(e)?"dny":"dní"):r+"dny";case"M":return t||a?"měsíc":"měsícem";case"MM":return t||a?r+(i(e)?"měsíce":"měsíců"):r+"měsíci";case"y":return t||a?"rok":"rokem";case"yy":return t||a?r+(i(e)?"roky":"let"):r+"lety"}}e.defineLocale("cs",{months:t,monthsShort:n,monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("c1df"))},"3ca3":function(e,t,n){"use strict";var a=n("6547").charAt,r=n("69f3"),i=n("7dd0"),o="String Iterator",s=r.set,l=r.getterFor(o);i(String,"String",(function(e){s(this,{type:o,string:String(e),index:0})}),(function(){var e,t=l(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=a(n,r),t.index+=e.length,{value:e,done:!1})}))},"3ce4":function(e,t,n){"use strict";var a=n("1020"),r=n("073e");t.highlight=o,t.highlightAuto=function(e,t){var n,s,l,c,d=t||{},u=d.subset||a.listLanguages(),p=d.prefix,m=u.length,f=-1;if(null==p&&(p=i),"string"!=typeof e)throw r("Expected `string` for value, got `%s`",e);for(s={relevance:0,language:null,value:[]},n={relevance:0,language:null,value:[]};++fs.relevance&&(s=l),l.relevance>n.relevance&&(s=n,n=l));return s.language&&(n.secondBest=s),n},t.registerLanguage=function(e,t){a.registerLanguage(e,t)},t.listLanguages=function(){return a.listLanguages()},t.registerAlias=function(e,t){var n,r=e;for(n in t&&((r={})[e]=t),r)a.registerAliases(r[n],{languageName:n})},s.prototype.addText=function(e){var t,n,a=this.stack;""!==e&&(t=a[a.length-1],(n=t.children[t.children.length-1])&&"text"===n.type?n.value+=e:t.children.push({type:"text",value:e}))},s.prototype.addKeyword=function(e,t){this.openNode(t),this.addText(e),this.closeNode()},s.prototype.addSublanguage=function(e,t){var n=this.stack,a=n[n.length-1],r=e.rootNode.children,i=t?{type:"element",tagName:"span",properties:{className:[t]},children:r}:r;a.children=a.children.concat(i)},s.prototype.openNode=function(e){var t=this.stack,n=this.options.classPrefix+e,a=t[t.length-1],r={type:"element",tagName:"span",properties:{className:[n]},children:[]};a.children.push(r),t.push(r)},s.prototype.closeNode=function(){this.stack.pop()},s.prototype.closeAllNodes=l,s.prototype.finalize=l,s.prototype.toHTML=function(){return""};var i="hljs-";function o(e,t,n){var o,l=a.configure({}),c=(n||{}).prefix;if("string"!=typeof e)throw r("Expected `string` for name, got `%s`",e);if(!a.getLanguage(e))throw r("Unknown language: `%s` is not registered",e);if("string"!=typeof t)throw r("Expected `string` for value, got `%s`",t);if(null==c&&(c=i),a.configure({__emitter:s,classPrefix:c}),o=a.highlight(e,t,!0),a.configure(l||{}),o.errorRaised)throw o.errorRaised;return{relevance:o.relevance,language:o.language,value:o.emitter.rootNode.children}}function s(e){this.options=e,this.rootNode={children:[]},this.stack=[this.rootNode]}function l(){}},"3de5":function(e,t,n){!function(e){"use strict";var t={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};e.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(e){return e+"வது"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,t,n){return e<2?" யாமம்":e<6?" வைகறை":e<10?" காலை":e<14?" நண்பகல்":e<18?" எற்பாடு":e<22?" மாலை":" யாமம்"},meridiemHour:function(e,t){return 12===e&&(e=0),"யாமம்"===t?e<2?e:e+12:"வைகறை"===t||"காலை"===t||"நண்பகல்"===t&&e>=10?e:e+12},week:{dow:0,doy:6}})}(n("c1df"))},"3e92":function(e,t,n){!function(e){"use strict";var t={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};e.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(e){return e.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(e,t){return 12===e&&(e=0),"ರಾತ್ರಿ"===t?e<4?e:e+12:"ಬೆಳಿಗ್ಗೆ"===t?e:"ಮಧ್ಯಾಹ್ನ"===t?e>=10?e:e+12:"ಸಂಜೆ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"ರಾತ್ರಿ":e<10?"ಬೆಳಿಗ್ಗೆ":e<17?"ಮಧ್ಯಾಹ್ನ":e<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(e){return e+"ನೇ"},week:{dow:0,doy:6}})}(n("c1df"))},"3f8c":function(e,t){e.exports={}},4160:function(e,t,n){"use strict";var a=n("23e7"),r=n("17c2");a({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},"41c3":function(e,t,n){var a=n("1a8c"),r=n("eac5"),i=n("ec8c"),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!a(e))return i(e);var t=r(e),n=[];for(var s in e)("constructor"!=s||!t&&o.call(e,s))&&n.push(s);return n}},"423e":function(e,t,n){!function(e){"use strict";e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n("c1df"))},4245:function(e,t,n){var a=n("1290");e.exports=function(e,t){var n=e.__data__;return a(t)?n["string"==typeof t?"string":"hash"]:n.map}},42454:function(e,t,n){var a=n("f909"),r=n("2ec1")((function(e,t,n){a(e,t,n)}));e.exports=r},"428f":function(e,t,n){var a=n("da84");e.exports=a},"434b":function(e,t,n){var a,r=n("ad4e"),i=(a=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";e.exports=function(e){return!!i&&i in e}},4359:function(e,t){e.exports=function(e,t){var n=-1,a=e.length;for(t||(t=Array(a));++n=10;)e/=10;return r(e)}return r(e/=1e3)}e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:n,past:a,s:"e puer Sekonnen",ss:"%d Sekonnen",m:t,mm:"%d Minutten",h:t,hh:"%d Stonnen",d:t,dd:"%d Deeg",M:t,MM:"%d Méint",y:t,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("c1df"))},4472:function(e,t,n){var a=n("f558"),r=n("59bc"),i=n("487c");e.exports=function(e){return i(e)?a(e,!0):r(e)}},"44ad":function(e,t,n){var a=n("d039"),r=n("c6b6"),i="".split;e.exports=a((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==r(e)?i.call(e,""):Object(e)}:Object},"44d2":function(e,t,n){var a=n("b622"),r=n("7c73"),i=n("9bf2"),o=a("unscopables"),s=Array.prototype;null==s[o]&&i.f(s,o,{configurable:!0,value:r(null)}),e.exports=function(e){s[o][e]=!0}},"44de":function(e,t,n){var a=n("da84");e.exports=function(e,t){var n=a.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},"44e7":function(e,t,n){var a=n("861d"),r=n("c6b6"),i=n("b622")("match");e.exports=function(e){var t;return a(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==r(e))}},"44f3":function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,a){n[++t]=[a,e]})),n}},4678:function(e,t,n){var a={"./af":"2bfb","./af.js":"2bfb","./ar":"8e73","./ar-dz":"a356","./ar-dz.js":"a356","./ar-kw":"423e","./ar-kw.js":"423e","./ar-ly":"1cfd","./ar-ly.js":"1cfd","./ar-ma":"0a84","./ar-ma.js":"0a84","./ar-sa":"8230","./ar-sa.js":"8230","./ar-tn":"6d83","./ar-tn.js":"6d83","./ar.js":"8e73","./az":"485c","./az.js":"485c","./be":"1fc1","./be.js":"1fc1","./bg":"84aa","./bg.js":"84aa","./bm":"a7fa","./bm.js":"a7fa","./bn":"9043","./bn-bd":"9686","./bn-bd.js":"9686","./bn.js":"9043","./bo":"d26a","./bo.js":"d26a","./br":"6887","./br.js":"6887","./bs":"2554","./bs.js":"2554","./ca":"d716","./ca.js":"d716","./cs":"3c0d","./cs.js":"3c0d","./cv":"03ec","./cv.js":"03ec","./cy":"9797","./cy.js":"9797","./da":"0f14","./da.js":"0f14","./de":"b469","./de-at":"b3eb","./de-at.js":"b3eb","./de-ch":"bb71","./de-ch.js":"bb71","./de.js":"b469","./dv":"598a","./dv.js":"598a","./el":"8d47","./el.js":"8d47","./en-au":"0e6b","./en-au.js":"0e6b","./en-ca":"3886","./en-ca.js":"3886","./en-gb":"39a6","./en-gb.js":"39a6","./en-ie":"e1d3","./en-ie.js":"e1d3","./en-il":"7333","./en-il.js":"7333","./en-in":"ec2e","./en-in.js":"ec2e","./en-nz":"6f50","./en-nz.js":"6f50","./en-sg":"b7e9","./en-sg.js":"b7e9","./eo":"65db","./eo.js":"65db","./es":"898b","./es-do":"0a3c","./es-do.js":"0a3c","./es-mx":"b5b7","./es-mx.js":"b5b7","./es-us":"55c9","./es-us.js":"55c9","./es.js":"898b","./et":"ec18","./et.js":"ec18","./eu":"0ff2","./eu.js":"0ff2","./fa":"8df4","./fa.js":"8df4","./fi":"81e9","./fi.js":"81e9","./fil":"d69a","./fil.js":"d69a","./fo":"0721","./fo.js":"0721","./fr":"9f26","./fr-ca":"d9f8","./fr-ca.js":"d9f8","./fr-ch":"0e49","./fr-ch.js":"0e49","./fr.js":"9f26","./fy":"7118","./fy.js":"7118","./ga":"5120","./ga.js":"5120","./gd":"f6b4","./gd.js":"f6b4","./gl":"8840","./gl.js":"8840","./gom-deva":"aaf2","./gom-deva.js":"aaf2","./gom-latn":"0caa","./gom-latn.js":"0caa","./gu":"e0c5","./gu.js":"e0c5","./he":"c7aa","./he.js":"c7aa","./hi":"dc4d","./hi.js":"dc4d","./hr":"4ba9","./hr.js":"4ba9","./hu":"5b14","./hu.js":"5b14","./hy-am":"d6b6","./hy-am.js":"d6b6","./id":"5038","./id.js":"5038","./is":"0558","./is.js":"0558","./it":"6e98","./it-ch":"6f12","./it-ch.js":"6f12","./it.js":"6e98","./ja":"079e","./ja.js":"079e","./jv":"b540","./jv.js":"b540","./ka":"201b","./ka.js":"201b","./kk":"6d79","./kk.js":"6d79","./km":"e81d","./km.js":"e81d","./kn":"3e92","./kn.js":"3e92","./ko":"22f8","./ko.js":"22f8","./ku":"2421","./ku.js":"2421","./ky":"9609","./ky.js":"9609","./lb":"440c","./lb.js":"440c","./lo":"b29d","./lo.js":"b29d","./lt":"26f9","./lt.js":"26f9","./lv":"b97c","./lv.js":"b97c","./me":"293c","./me.js":"293c","./mi":"688b","./mi.js":"688b","./mk":"6909","./mk.js":"6909","./ml":"02fb","./ml.js":"02fb","./mn":"958b","./mn.js":"958b","./mr":"39bd","./mr.js":"39bd","./ms":"ebe4","./ms-my":"6403","./ms-my.js":"6403","./ms.js":"ebe4","./mt":"1b45","./mt.js":"1b45","./my":"8689","./my.js":"8689","./nb":"6ce3","./nb.js":"6ce3","./ne":"3a39","./ne.js":"3a39","./nl":"facd","./nl-be":"db29","./nl-be.js":"db29","./nl.js":"facd","./nn":"b84c","./nn.js":"b84c","./oc-lnc":"167b","./oc-lnc.js":"167b","./pa-in":"f3ff","./pa-in.js":"f3ff","./pl":"8d57","./pl.js":"8d57","./pt":"f260","./pt-br":"d2d4","./pt-br.js":"d2d4","./pt.js":"f260","./ro":"972c","./ro.js":"972c","./ru":"957c","./ru.js":"957c","./sd":"6784","./sd.js":"6784","./se":"ffff","./se.js":"ffff","./si":"eda5","./si.js":"eda5","./sk":"7be6","./sk.js":"7be6","./sl":"8155","./sl.js":"8155","./sq":"c8f3","./sq.js":"c8f3","./sr":"cf1e","./sr-cyrl":"13e9","./sr-cyrl.js":"13e9","./sr.js":"cf1e","./ss":"52bd","./ss.js":"52bd","./sv":"5fbd","./sv.js":"5fbd","./sw":"74dc","./sw.js":"74dc","./ta":"3de5","./ta.js":"3de5","./te":"5cbb","./te.js":"5cbb","./tet":"576c","./tet.js":"576c","./tg":"3b1b","./tg.js":"3b1b","./th":"10e8","./th.js":"10e8","./tk":"5aff","./tk.js":"5aff","./tl-ph":"0f38","./tl-ph.js":"0f38","./tlh":"cf75","./tlh.js":"cf75","./tr":"0e81","./tr.js":"0e81","./tzl":"cf51","./tzl.js":"cf51","./tzm":"c109","./tzm-latn":"b53d","./tzm-latn.js":"b53d","./tzm.js":"c109","./ug-cn":"6117","./ug-cn.js":"6117","./uk":"ada2","./uk.js":"ada2","./ur":"5294","./ur.js":"5294","./uz":"2e8c","./uz-latn":"010e","./uz-latn.js":"010e","./uz.js":"2e8c","./vi":"2921","./vi.js":"2921","./x-pseudo":"fd7e","./x-pseudo.js":"fd7e","./yo":"7f33","./yo.js":"7f33","./zh-cn":"5c3a","./zh-cn.js":"5c3a","./zh-hk":"49ab","./zh-hk.js":"49ab","./zh-mo":"3a6c","./zh-mo.js":"3a6c","./zh-tw":"90ea","./zh-tw.js":"90ea"};function r(e){var t=i(e);return n(t)}function i(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}r.keys=function(){return Object.keys(a)},r.resolve=i,e.exports=r,r.id="4678"},4773:function(e,t,n){var a=n("eebf"),r=n("f87b"),i=n("ae58"),o=n("1ca8"),s=n("71b8"),l=n("9fc8"),c=n("d934"),d=n("f0c4"),u=n("505d"),p=n("6273"),m=n("ac88"),f=n("aad9"),h=n("cd04"),_=n("9e0f"),v=n("1f55");e.exports=function(e,t,n,g,y,b,w){var x=_(e,n),k=_(t,n),D=w.get(k);if(D)a(e,n,D);else{var M=b?b(x,k,n+"",e,t,w):void 0,S=void 0===M;if(S){var C=c(k),L=!C&&u(k),T=!C&&!L&&h(k);M=k,C||L||T?c(x)?M=x:d(x)?M=o(x):L?(S=!1,M=r(k,!0)):T?(S=!1,M=i(k,!0)):M=[]:f(k)||l(k)?(M=x,l(x)?M=v(x):m(x)&&!p(x)||(M=s(k))):S=!1}S&&(w.set(k,M),y(M,k,g,b,w),w.delete(k)),a(e,n,M)}}},4840:function(e,t,n){var a=n("825a"),r=n("1c0b"),i=n("b622")("species");e.exports=function(e,t){var n,o=a(e).constructor;return void 0===o||null==(n=a(o)[i])?t:r(n)}},"485c":function(e,t,n){!function(e){"use strict";var t={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"bir neçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(e){return/^(gündüz|axşam)$/.test(e)},meridiem:function(e,t,n){return e<4?"gecə":e<12?"səhər":e<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(e){if(0===e)return e+"-ıncı";var n=e%10,a=e%100-n,r=e>=100?100:null;return e+(t[n]||t[a]||t[r])},week:{dow:1,doy:7}})}(n("c1df"))},"487c":function(e,t,n){var a=n("6273"),r=n("ae2d");e.exports=function(e){return null!=e&&r(e.length)&&!a(e)}},4930:function(e,t,n){var a=n("d039");e.exports=!!Object.getOwnPropertySymbols&&!a((function(){return!String(Symbol())}))},"498a":function(e,t,n){"use strict";var a=n("23e7"),r=n("58a8").trim;a({target:"String",proto:!0,forced:n("c8d2")("trim")},{trim:function(){return r(this)}})},"49ab":function(e,t,n){!function(e){"use strict";e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var a=100*e+t;return a<600?"凌晨":a<900?"早上":a<1200?"上午":1200===a?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n("c1df"))},"49f4":function(e,t,n){var a=n("6044");e.exports=function(){this.__data__=a?a(null):{},this.size=0}},"4b73":function(e,t,n){(function(e){var a=n("b83a"),r=t&&!t.nodeType&&t,i=r&&"object"==typeof e&&e&&!e.nodeType&&e,o=i&&i.exports===r&&a.process,s=function(){try{var e=i&&i.require&&i.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=s}).call(this,n("62e4")(e))},"4ba9":function(e,t,n){!function(e){"use strict";function t(e,t,n){var a=e+" ";switch(n){case"ss":return a+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return t?"jedna minuta":"jedne minute";case"mm":return a+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return t?"jedan sat":"jednog sata";case"hh":return a+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return a+=1===e?"dan":"dana";case"MM":return a+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return a+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:return"[prošlu] [nedjelju] [u] LT";case 3:return"[prošlu] [srijedu] [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("c1df"))},"4d5b":function(e,t,n){var a=n("86c5"),r=n("e253"),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!a(e))return r(e);var t=[];for(var n in Object(e))i.call(e,n)&&"constructor"!=n&&t.push(n);return t}},"4d64":function(e,t,n){var a=n("fc6a"),r=n("50c4"),i=n("23cb"),o=function(e){return function(t,n,o){var s,l=a(t),c=r(l.length),d=i(o,c);if(e&&n!=n){for(;c>d;)if((s=l[d++])!=s)return!0}else for(;c>d;d++)if((e||d in l)&&l[d]===n)return e||d||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},"4de4":function(e,t,n){"use strict";var a=n("23e7"),r=n("b727").filter,i=n("1dde"),o=n("ae40"),s=i("filter"),l=o("filter");a({target:"Array",proto:!0,forced:!s||!l},{filter:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},"4df4":function(e,t,n){"use strict";var a=n("0366"),r=n("7b0b"),i=n("9bdd"),o=n("e95a"),s=n("50c4"),l=n("8418"),c=n("35a1");e.exports=function(e){var t,n,d,u,p,m,f=r(e),h="function"==typeof this?this:Array,_=arguments.length,v=_>1?arguments[1]:void 0,g=void 0!==v,y=c(f),b=0;if(g&&(v=a(v,_>2?arguments[2]:void 0,2)),null==y||h==Array&&o(y))for(n=new h(t=s(f.length));t>b;b++)m=g?v(f[b],b):f[b],l(n,b,m);else for(p=(u=y.call(f)).next,n=new h;!(d=p.call(u)).done;b++)m=g?i(u,v,[d.value,b],!0):d.value,l(n,b,m);return n.length=b,n}},"4f50":function(e,t,n){var a=n("b760"),r=n("e5383"),i=n("c8fe"),o=n("4359"),s=n("fa21"),l=n("d370"),c=n("6747"),d=n("dcbe"),u=n("0d24"),p=n("9520"),m=n("1a8c"),f=n("60ed"),h=n("73ac"),_=n("8adb"),v=n("8de2");e.exports=function(e,t,n,g,y,b,w){var x=_(e,n),k=_(t,n),D=w.get(k);if(D)a(e,n,D);else{var M=b?b(x,k,n+"",e,t,w):void 0,S=void 0===M;if(S){var C=c(k),L=!C&&u(k),T=!C&&!L&&h(k);M=k,C||L||T?c(x)?M=x:d(x)?M=o(x):L?(S=!1,M=r(k,!0)):T?(S=!1,M=i(k,!0)):M=[]:f(k)||l(k)?(M=x,l(x)?M=v(x):m(x)&&!p(x)||(M=s(k))):S=!1}S&&(w.set(k,M),y(M,k,g,b,w),w.delete(k)),a(e,n,M)}}},5038:function(e,t,n){!function(e){"use strict";e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"siang"===t?e>=11?e:e+12:"sore"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}})}(n("c1df"))},"505d":function(e,t,n){(function(e){var a=n("8aed"),r=n("2311"),i=t&&!t.nodeType&&t,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,s=o&&o.exports===i?a.Buffer:void 0,l=(s?s.isBuffer:void 0)||r;e.exports=l}).call(this,n("62e4")(e))},"50c4":function(e,t,n){var a=n("a691"),r=Math.min;e.exports=function(e){return e>0?r(a(e),9007199254740991):0}},"50d8":function(e,t){e.exports=function(e,t){for(var n=-1,a=Array(e);++n=11?e:e+12:"entsambama"===t||"ebusuku"===t?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n("c1df"))},5313:function(e,t,n){"use strict";n.r(t),n.d(t,"AllSelection",(function(){return m})),n.d(t,"EditorState",(function(){return x})),n.d(t,"NodeSelection",(function(){return u})),n.d(t,"Plugin",(function(){return S})),n.d(t,"PluginKey",(function(){return T})),n.d(t,"Selection",(function(){return o})),n.d(t,"SelectionRange",(function(){return l})),n.d(t,"TextSelection",(function(){return c})),n.d(t,"Transaction",(function(){return v}));var a=n("304a"),r=n("0ac0"),i=Object.create(null),o=function(e,t,n){this.ranges=n||[new l(e.min(t),e.max(t))],this.$anchor=e,this.$head=t},s={anchor:{configurable:!0},head:{configurable:!0},from:{configurable:!0},to:{configurable:!0},$from:{configurable:!0},$to:{configurable:!0},empty:{configurable:!0}};s.anchor.get=function(){return this.$anchor.pos},s.head.get=function(){return this.$head.pos},s.from.get=function(){return this.$from.pos},s.to.get=function(){return this.$to.pos},s.$from.get=function(){return this.ranges[0].$from},s.$to.get=function(){return this.ranges[0].$to},s.empty.get=function(){for(var e=this.ranges,t=0;t=0;r--){var i=t<0?h(e.node(0),e.node(r),e.before(r+1),e.index(r),t,n):h(e.node(0),e.node(r),e.after(r+1),e.index(r)+1,t,n);if(i)return i}},o.near=function(e,t){return void 0===t&&(t=1),this.findFrom(e,t)||this.findFrom(e,-t)||new m(e.node(0))},o.atStart=function(e){return h(e,e,0,0,1)||new m(e)},o.atEnd=function(e){return h(e,e,e.content.size,e.childCount,-1)||new m(e)},o.fromJSON=function(e,t){if(!t||!t.type)throw new RangeError("Invalid input for Selection.fromJSON");var n=i[t.type];if(!n)throw new RangeError("No selection type "+t.type+" defined");return n.fromJSON(e,t)},o.jsonID=function(e,t){if(e in i)throw new RangeError("Duplicate use of selection JSON ID "+e);return i[e]=t,t.prototype.jsonID=e,t},o.prototype.getBookmark=function(){return c.between(this.$anchor,this.$head).getBookmark()},Object.defineProperties(o.prototype,s),o.prototype.visible=!0;var l=function(e,t){this.$from=e,this.$to=t},c=function(e){function t(t,n){void 0===n&&(n=t),e.call(this,t,n)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={$cursor:{configurable:!0}};return n.$cursor.get=function(){return this.$anchor.pos==this.$head.pos?this.$head:null},t.prototype.map=function(n,a){var r=n.resolve(a.map(this.head));if(!r.parent.inlineContent)return e.near(r);var i=n.resolve(a.map(this.anchor));return new t(i.parent.inlineContent?i:r,r)},t.prototype.replace=function(t,n){if(void 0===n&&(n=a.Slice.empty),e.prototype.replace.call(this,t,n),n==a.Slice.empty){var r=this.$from.marksAcross(this.$to);r&&t.ensureMarks(r)}},t.prototype.eq=function(e){return e instanceof t&&e.anchor==this.anchor&&e.head==this.head},t.prototype.getBookmark=function(){return new d(this.anchor,this.head)},t.prototype.toJSON=function(){return{type:"text",anchor:this.anchor,head:this.head}},t.fromJSON=function(e,n){if("number"!=typeof n.anchor||"number"!=typeof n.head)throw new RangeError("Invalid input for TextSelection.fromJSON");return new t(e.resolve(n.anchor),e.resolve(n.head))},t.create=function(e,t,n){void 0===n&&(n=t);var a=e.resolve(t);return new this(a,n==t?a:e.resolve(n))},t.between=function(n,a,r){var i=n.pos-a.pos;if(r&&!i||(r=i>=0?1:-1),!a.parent.inlineContent){var o=e.findFrom(a,r,!0)||e.findFrom(a,-r,!0);if(!o)return e.near(a,r);a=o.$head}return n.parent.inlineContent||(0==i||(n=(e.findFrom(n,-r,!0)||e.findFrom(n,r,!0)).$anchor).pos0?0:1);r>0?o=0;o+=r){var s=t.child(o);if(s.isAtom){if(!i&&u.isSelectable(s))return u.create(e,n-(r<0?s.nodeSize:0))}else{var l=h(e,s,n+r,r<0?s.childCount:0,r,i);if(l)return l}n+=s.nodeSize*r}}function _(e,t,n){var a=e.steps.length-1;if(!(a0},t.prototype.setStoredMarks=function(e){return this.storedMarks=e,this.updated|=2,this},t.prototype.ensureMarks=function(e){return a.Mark.sameSet(this.storedMarks||this.selection.$from.marks(),e)||this.setStoredMarks(e),this},t.prototype.addStoredMark=function(e){return this.ensureMarks(e.addToSet(this.storedMarks||this.selection.$head.marks()))},t.prototype.removeStoredMark=function(e){return this.ensureMarks(e.removeFromSet(this.storedMarks||this.selection.$head.marks()))},n.storedMarksSet.get=function(){return(2&this.updated)>0},t.prototype.addStep=function(t,n){e.prototype.addStep.call(this,t,n),this.updated=-3&this.updated,this.storedMarks=null},t.prototype.setTime=function(e){return this.time=e,this},t.prototype.replaceSelection=function(e){return this.selection.replace(this,e),this},t.prototype.replaceSelectionWith=function(e,t){var n=this.selection;return!1!==t&&(e=e.mark(this.storedMarks||(n.empty?n.$from.marks():n.$from.marksAcross(n.$to)||a.Mark.none))),n.replaceWith(this,e),this},t.prototype.deleteSelection=function(){return this.selection.replace(this),this},t.prototype.insertText=function(e,t,n){void 0===n&&(n=t);var a=this.doc.type.schema;if(null==t)return e?this.replaceSelectionWith(a.text(e),!0):this.deleteSelection();if(!e)return this.deleteRange(t,n);var r=this.storedMarks;if(!r){var i=this.doc.resolve(t);r=n==t?i.marks():i.marksAcross(this.doc.resolve(n))}return this.replaceRangeWith(t,n,a.text(e,r)),this.selection.empty||this.setSelection(o.near(this.selection.$to)),this},t.prototype.setMeta=function(e,t){return this.meta["string"==typeof e?e:e.key]=t,this},t.prototype.getMeta=function(e){return this.meta["string"==typeof e?e:e.key]},n.isGeneric.get=function(){for(var e in this.meta)return!1;return!0},t.prototype.scrollIntoView=function(){return this.updated|=4,this},n.scrolledIntoView.get=function(){return(4&this.updated)>0},Object.defineProperties(t.prototype,n),t}(r.e);function g(e,t){return t&&e?e.bind(t):e}var y=function(e,t,n){this.name=e,this.init=g(t.init,n),this.apply=g(t.apply,n)},b=[new y("doc",{init:function(e){return e.doc||e.schema.topNodeType.createAndFill()},apply:function(e){return e.doc}}),new y("selection",{init:function(e,t){return e.selection||o.atStart(t.doc)},apply:function(e){return e.selection}}),new y("storedMarks",{init:function(e){return e.storedMarks||null},apply:function(e,t,n,a){return a.selection.$cursor?e.storedMarks:null}}),new y("scrollToSelection",{init:function(){return 0},apply:function(e,t){return e.scrolledIntoView?t+1:t}})],w=function(e,t){var n=this;this.schema=e,this.fields=b.concat(),this.plugins=[],this.pluginsByKey=Object.create(null),t&&t.forEach((function(e){if(n.pluginsByKey[e.key])throw new RangeError("Adding different instances of a keyed plugin ("+e.key+")");n.plugins.push(e),n.pluginsByKey[e.key]=e,e.spec.state&&n.fields.push(new y(e.key,e.spec.state,e))}))},x=function(e){this.config=e},k={schema:{configurable:!0},plugins:{configurable:!0},tr:{configurable:!0}};k.schema.get=function(){return this.config.schema},k.plugins.get=function(){return this.config.plugins},x.prototype.apply=function(e){return this.applyTransaction(e).state},x.prototype.filterTransaction=function(e,t){void 0===t&&(t=-1);for(var n=0;n-1&&D.splice(t,1)},Object.defineProperties(x.prototype,k);var D=[];function M(e,t,n){for(var a in e){var r=e[a];r instanceof Function?r=r.bind(t):"handleDOMEvents"==a&&(r=M(r,t,{})),n[a]=r}return n}var S=function(e){this.props={},e.props&&M(e.props,this,this.props),this.spec=e,this.key=e.key?e.key.key:L("plugin")};S.prototype.getState=function(e){return e[this.key]};var C=Object.create(null);function L(e){return e in C?e+"$"+ ++C[e]:(C[e]=0,e+"$")}var T=function(e){void 0===e&&(e="key"),this.key=L(e)};T.prototype.get=function(e){return e.config.pluginsByKey[this.key]},T.prototype.getState=function(e){return e[this.key]}},5319:function(e,t,n){"use strict";var a=n("d784"),r=n("825a"),i=n("7b0b"),o=n("50c4"),s=n("a691"),l=n("1d80"),c=n("8aa5"),d=n("14c3"),u=Math.max,p=Math.min,m=Math.floor,f=/\$([$&'`]|\d\d?|<[^>]*>)/g,h=/\$([$&'`]|\d\d?)/g;a("replace",2,(function(e,t,n,a){var _=a.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,v=a.REPLACE_KEEPS_$0,g=_?"$":"$0";return[function(n,a){var r=l(this),i=null==n?void 0:n[e];return void 0!==i?i.call(n,r,a):t.call(String(r),n,a)},function(e,a){if(!_&&v||"string"==typeof a&&-1===a.indexOf(g)){var i=n(t,e,this,a);if(i.done)return i.value}var l=r(e),m=String(this),f="function"==typeof a;f||(a=String(a));var h=l.global;if(h){var b=l.unicode;l.lastIndex=0}for(var w=[];;){var x=d(l,m);if(null===x)break;if(w.push(x),!h)break;""===String(x[0])&&(l.lastIndex=c(m,o(l.lastIndex),b))}for(var k,D="",M=0,S=0;S=M&&(D+=m.slice(M,L)+j,M=L+C.length)}return D+m.slice(M)}];function y(e,n,a,r,o,s){var l=a+e.length,c=r.length,d=h;return void 0!==o&&(o=i(o),d=f),t.call(s,d,(function(t,i){var s;switch(i.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,a);case"'":return n.slice(l);case"<":s=o[i.slice(1,-1)];break;default:var d=+i;if(0===d)return t;if(d>c){var u=m(d/10);return 0===u?t:u<=c?void 0===r[u-1]?i.charAt(1):r[u-1]+i.charAt(1):t}s=r[d-1]}return void 0===s?"":s}))}}))},5438:function(e,t,n){var a=n("1bc6");e.exports=function(e,t,n){"__proto__"==t&&a?a(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},"55a3":function(e,t){e.exports=function(e){return this.__data__.has(e)}},"55be":function(e,t,n){"use strict";n.r(t),n.d(t,"CellSelection",(function(){return P})),n.d(t,"TableMap",(function(){return f})),n.d(t,"TableView",(function(){return Ce})),n.d(t,"__clipCells",(function(){return I})),n.d(t,"__insertCells",(function(){return R})),n.d(t,"__pastedCells",(function(){return z})),n.d(t,"addColSpan",(function(){return A})),n.d(t,"addColumn",(function(){return re})),n.d(t,"addColumnAfter",(function(){return oe})),n.d(t,"addColumnBefore",(function(){return ie})),n.d(t,"addRow",(function(){return de})),n.d(t,"addRowAfter",(function(){return pe})),n.d(t,"addRowBefore",(function(){return ue})),n.d(t,"cellAround",(function(){return w})),n.d(t,"colCount",(function(){return L})),n.d(t,"columnIsHeader",(function(){return j})),n.d(t,"columnResizing",(function(){return Oe})),n.d(t,"columnResizingPluginKey",(function(){return Te})),n.d(t,"deleteColumn",(function(){return le})),n.d(t,"deleteRow",(function(){return fe})),n.d(t,"deleteTable",(function(){return Se})),n.d(t,"findCell",(function(){return C})),n.d(t,"fixTables",(function(){return ne})),n.d(t,"fixTablesKey",(function(){return ee})),n.d(t,"goToNextCell",(function(){return Me})),n.d(t,"handlePaste",(function(){return Z})),n.d(t,"inSameTable",(function(){return S})),n.d(t,"isInTable",(function(){return x})),n.d(t,"mergeCells",(function(){return _e})),n.d(t,"moveCellForward",(function(){return M})),n.d(t,"nextCell",(function(){return T})),n.d(t,"pointsAtCell",(function(){return D})),n.d(t,"removeColSpan",(function(){return E})),n.d(t,"removeColumn",(function(){return se})),n.d(t,"removeRow",(function(){return me})),n.d(t,"rowIsHeader",(function(){return ce})),n.d(t,"selectedRect",(function(){return ae})),n.d(t,"selectionCell",(function(){return k})),n.d(t,"setAttr",(function(){return O})),n.d(t,"setCellAttr",(function(){return ye})),n.d(t,"splitCell",(function(){return ve})),n.d(t,"splitCellWithType",(function(){return ge})),n.d(t,"tableEditing",(function(){return Ye})),n.d(t,"tableEditingKey",(function(){return b})),n.d(t,"tableNodeTypes",(function(){return y})),n.d(t,"tableNodes",(function(){return g})),n.d(t,"toggleHeader",(function(){return we})),n.d(t,"toggleHeaderCell",(function(){return De})),n.d(t,"toggleHeaderColumn",(function(){return ke})),n.d(t,"toggleHeaderRow",(function(){return xe})),n.d(t,"updateColumnsOnResize",(function(){return Le}));var a,r,i=n("5313"),o=n("304a"),s=n("7f06"),l=n("576a"),c=n("0ac0");if("undefined"!=typeof WeakMap){var d=new WeakMap;a=function(e){return d.get(e)},r=function(e,t){return d.set(e,t),t}}else{var u=[],p=0;a=function(e){for(var t=0;ta&&(i+=c.attrs.colspan)}for(var d=0;d1&&(n=!0)}-1==t?t=i:t!=i&&(t=Math.max(t,i))}return t}(e),n=e.childCount,a=[],r=0,i=null,o=[],s=0,l=t*n;s=n){(i||(i=[])).push({type:"overlong_rowspan",pos:d,n:g-b});break}for(var w=r+b*t,x=0;x0;t--)if("row"==e.node(t).type.spec.tableRole)return e.node(0).resolve(e.before(t+1));return null}function x(e){for(var t=e.selection.$head,n=t.depth;n>0;n--)if("row"==t.node(n).type.spec.tableRole)return!0;return!1}function k(e){var t=e.selection;return t.$anchorCell?t.$anchorCell.pos>t.$headCell.pos?t.$anchorCell:t.$headCell:t.node&&"cell"==t.node.type.spec.tableRole?t.$anchor:w(t.$head)||function(e){for(var t=e.nodeAfter,n=e.pos;t;t=t.firstChild,n++){var a=t.type.spec.tableRole;if("cell"==a||"header_cell"==a)return e.doc.resolve(n)}for(var r=e.nodeBefore,i=e.pos;r;r=r.lastChild,i--){var o=r.type.spec.tableRole;if("cell"==o||"header_cell"==o)return e.doc.resolve(i-r.nodeSize)}}(t.$head)}function D(e){return"row"==e.parent.type.spec.tableRole&&e.nodeAfter}function M(e){return e.node(0).resolve(e.pos+e.nodeAfter.nodeSize)}function S(e,t){return e.depth==t.depth&&e.pos>=t.start(-1)&&e.pos<=t.end(-1)}function C(e){return f.get(e.node(-1)).findCell(e.pos-e.start(-1))}function L(e){return f.get(e.node(-1)).colCount(e.pos-e.start(-1))}function T(e,t,n){var a=e.start(-1),r=f.get(e.node(-1)).nextCell(e.pos-a,t,n);return null==r?null:e.node(0).resolve(a+r)}function O(e,t,n){var a={};for(var r in e)a[r]=e[r];return a[t]=n,a}function E(e,t,n){void 0===n&&(n=1);var a=O(e,"colspan",e.colspan-n);return a.colwidth&&(a.colwidth=a.colwidth.slice(),a.colwidth.splice(t,n),a.colwidth.some((function(e){return e>0}))||(a.colwidth=null)),a}function A(e,t,n){void 0===n&&(n=1);var a=O(e,"colspan",e.colspan+n);if(a.colwidth){a.colwidth=a.colwidth.slice();for(var r=0;r0||_>0){var v=m.attrs;h>0&&(v=E(v,0,h)),_>0&&(v=E(v,v.colspan-_,_)),m=p.lefta.bottom){var g=O(m.attrs,"rowspan",Math.min(p.bottom,a.bottom)-Math.max(p.top,a.top));m=p.top0)return!1;var n=e+this.$anchorCell.nodeAfter.attrs.rowspan,a=t+this.$headCell.nodeAfter.attrs.rowspan;return Math.max(n,a)==this.$headCell.node(-1).childCount},t.colSelection=function(e,n){void 0===n&&(n=e);var a=f.get(e.node(-1)),r=e.start(-1),i=a.findCell(e.pos-r),o=a.findCell(n.pos-r),s=e.node(0);return i.top<=o.top?(i.top>0&&(e=s.resolve(r+a.map[i.left])),o.bottom0&&(n=s.resolve(r+a.map[o.left])),i.bottom0)return!1;var r=n+this.$anchorCell.nodeAfter.attrs.colspan,i=a+this.$headCell.nodeAfter.attrs.colspan;return Math.max(r,i)==e.width},t.prototype.eq=function(e){return e instanceof t&&e.$anchorCell.pos==this.$anchorCell.pos&&e.$headCell.pos==this.$headCell.pos},t.rowSelection=function(e,n){void 0===n&&(n=e);var a=f.get(e.node(-1)),r=e.start(-1),i=a.findCell(e.pos-r),o=a.findCell(n.pos-r),s=e.node(0);return i.left<=o.left?(i.left>0&&(e=s.resolve(r+a.map[i.top*a.width])),o.right0&&(n=s.resolve(r+a.map[o.top*a.width])),i.right0&&a>0||"table"==t.firstChild.type.spec.tableRole);)n--,a--,t=t.firstChild.content;var r=t.firstChild,i=r.type.spec.tableRole,s=r.type.schema,l=[];if("row"==i)for(var c=0;c=0;i--)for(var s=r.child(i).attrs,l=s.rowspan,c=s.colspan,d=a;d=t.length&&t.push(o.Fragment.empty),n[m]t&&(f=f.type.create(E(f.attrs,f.attrs.colspan,p+f.attrs.colspan-t),f.content)),u.push(f),p+=f.attrs.colspan;for(var h=1;hn&&(x=x.type.create(O(x.attrs,"rowspan",Math.max(1,n-x.attrs.rowspan)),x.content)),y.push(x)}_.push(o.Fragment.from(y))}i=_,r=n}return{width:a,height:r,rows:i}}function F(e,t,n,a,r,i,o,s){if(0==o||o==t.height)return!1;for(var l=!1,c=r;ct.width)for(var u=0,p=0;ut.height){for(var v=[],g=0,b=(t.height-1)*t.width;g=t.width)&&n.nodeAt(t.map[b+g]).type==d.header_cell;v.push(w?c||(c=d.header_cell.createAndFill()):l||(l=d.cell.createAndFill()))}for(var x=d.row.create(null,o.Fragment.from(v)),k=[],D=t.height;D=0;r--){var o=a.node(r);if((n<0?a.index(r):a.indexAfter(r))!=(n<0?0:o.childCount))return null;if("cell"==o.type.spec.tableRole||"header_cell"==o.type.spec.tableRole){var s=a.before(r),l="vert"==t?n>0?"down":"up":n>0?"right":"left";return e.endOfTextblock(l)?s:null}}return null}function X(e,t){for(;t&&t!=e.dom;t=t.parentNode)if("TD"==t.nodeName||"TH"==t.nodeName)return t}function Q(e,t){var n=e.posAtCoords({left:t.clientX,top:t.clientY});return n&&n?w(e.state.doc.resolve(n.pos)):null}var ee=new i.PluginKey("fix-tables");function te(e,t,n,a){var r=e.childCount,i=t.childCount;e:for(var o=0,s=0;o0){var k="cell";b.firstChild&&(k=b.firstChild.type.spec.tableRole);for(var D=[],M=0;M0?-1:0;j(a,i,n+o)&&(o=0==n||n==a.width?null:0);for(var s=0;s0&&n0&&a.map[l-1]==c||n0?-1:0;ce(a,i,n+c)&&(c=0==n||n==a.height?null:0);for(var d=0,u=a.width*n;d0&&n0&&p==a.map[u-a.width]){var m=r.nodeAt(p).attrs;e.setNodeMarkup(e.mapping.slice(c).map(p+i),null,O(m,"rowspan",m.rowspan-1)),d+=m.colspan-1}else if(n0&&r[o]==r[o-1]||t.right0&&r[i]==r[i-n]||t.bottom0;t--){var n=e.node(t).type.spec.tableRole;if("cell"===n||"header_cell"===n)return e.node(t)}return null}(i.$from)))return!1;r=w(i.$from).pos}if(1==a.attrs.colspan&&1==a.attrs.rowspan)return!1;if(n){var o=a.attrs,s=[],l=o.colwidth;o.rowspan>1&&(o=O(o,"rowspan",1)),o.colspan>1&&(o=O(o,"colspan",1));for(var c,d=ae(t),u=t.tr,p=0;p=0;a--){var i=e.node(-1).child(a);if(i.childCount)return r-1-i.lastChild.nodeSize;r-=i.nodeSize}}else{if(e.index()0;a--)if("table"==n.node(a).type.spec.tableRole)return t&&t(e.tr.delete(n.before(a),n.after(a)).scrollIntoView()),!0;return!1}var Ce=function(e,t){this.node=e,this.cellMinWidth=t,this.dom=document.createElement("div"),this.dom.className="tableWrapper",this.table=this.dom.appendChild(document.createElement("table")),this.colgroup=this.table.appendChild(document.createElement("colgroup")),Le(e,this.colgroup,this.table,t),this.contentDOM=this.table.appendChild(document.createElement("tbody"))};function Le(e,t,n,a,r,i){for(var o=0,s=!0,l=t.firstChild,c=e.firstChild,d=0,u=0;d-1?{class:"resize-cursor"}:null},handleDOMEvents:{mousemove:function(e,n){!function(e,t,n,a,r){var i=Te.getState(e.state);if(!i.dragging){var o=function(e){for(;e&&"TD"!=e.nodeName&&"TH"!=e.nodeName;)e=e.classList.contains("ProseMirror")?null:e.parentNode;return e}(t.target),s=-1;if(o){var l=o.getBoundingClientRect(),c=l.left,d=l.right;t.clientX-c<=n?s=Ae(e,t,"left"):d-t.clientX<=n&&(s=Ae(e,t,"right"))}if(s!=i.activeHandle){if(!r&&-1!==s){var u=e.state.doc.resolve(s),p=u.node(-1),m=f.get(p),h=u.start(-1);if(m.colCount(u.pos-h)+u.nodeAfter.attrs.colspan-1==m.width-1)return}Pe(e,s)}}}(e,n,t,0,r)},mouseleave:function(e){!function(e){var t=Te.getState(e.state);t.activeHandle>-1&&!t.dragging&&Pe(e,-1)}(e)},mousedown:function(e,t){!function(e,t,n){var a=Te.getState(e.state);if(-1==a.activeHandle||a.dragging)return!1;var r=e.state.doc.nodeAt(a.activeHandle),i=function(e,t,n){var a=n.colspan,r=n.colwidth,i=r&&r[r.length-1];if(i)return i;var o=e.domAtPos(t),s=o.node.childNodes[o.offset].offsetWidth,l=a;if(r)for(var c=0;c-1)return function(e,t){for(var n=[],a=e.doc.resolve(t),r=a.node(-1),i=f.get(r),o=a.start(-1),s=i.colCount(a.pos-o)+a.nodeAfter.attrs.colspan,c=0;c=0&&!(t.after(i+1)=0&&!(n.before(o+1)>n.start(o));o--,r--);return a==r&&/row|table/.test(t.node(i).type.spec.tableRole)}(o)?a=i.TextSelection.create(s,o.from):o instanceof i.TextSelection&&function(e){for(var t,n,a=e.$from,r=e.$to,i=a.depth;i>0;i--){var o=a.node(i);if("cell"===o.type.spec.tableRole||"header_cell"===o.type.spec.tableRole){t=o;break}}for(var s=r.depth;s>0;s--){var l=r.node(s);if("cell"===l.type.spec.tableRole||"header_cell"===l.type.spec.tableRole){n=l;break}}return t!==n&&0===r.parentOffset}(o)&&(a=i.TextSelection.create(s,o.$from.start(),o.$from.end()));return a&&(t||(t=e.tr)).setSelection(a),t}(a,ne(a,n),t)}})}Ee.prototype.apply=function(e){var t=this,n=e.getMeta(Te);if(n&&null!=n.setHandle)return new Ee(n.setHandle,null);if(n&&void 0!==n.setDragging)return new Ee(t.activeHandle,n.setDragging);if(t.activeHandle>-1&&e.docChanged){var a=e.mapping.map(t.activeHandle,-1);D(e.doc.resolve(a))||(a=null),t=new Ee(a,t.dragging)}return t}},"55c9":function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),a=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?n[e.month()]:t[e.month()]:t},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n("c1df"))},5646:function(e,t,n){var a=n("5f60");e.exports=function(e,t){return a(e,t)}},5692:function(e,t,n){var a=n("c430"),r=n("c6cd");(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.8.0",mode:a?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},"56ef":function(e,t,n){var a=n("d066"),r=n("241c"),i=n("7418"),o=n("825a");e.exports=a("Reflect","ownKeys")||function(e){var t=r.f(o(e)),n=i.f;return n?t.concat(n(e)):t}},"576a":function(e,t,n){"use strict";n.d(t,"a",(function(){return Tt})),n.d(t,"b",(function(){return jt}));var a=n("5313"),r=n("304a"),i=n("0ac0"),o={};if("undefined"!=typeof navigator&&"undefined"!=typeof document){var s=/Edge\/(\d+)/.exec(navigator.userAgent),l=/MSIE \d/.test(navigator.userAgent),c=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);o.mac=/Mac/.test(navigator.platform);var d=o.ie=!!(l||c||s);o.ie_version=l?document.documentMode||6:c?+c[1]:s?+s[1]:null,o.gecko=!d&&/gecko\/(\d+)/i.test(navigator.userAgent),o.gecko_version=o.gecko&&+(/Firefox\/(\d+)/.exec(navigator.userAgent)||[0,0])[1];var u=!d&&/Chrome\/(\d+)/.exec(navigator.userAgent);o.chrome=!!u,o.chrome_version=u&&+u[1],o.ios=!d&&/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),o.android=/Android \d/.test(navigator.userAgent),o.webkit="webkitFontSmoothing"in document.documentElement.style,o.safari=/Apple Computer/.test(navigator.vendor),o.webkit_version=o.webkit&&+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]}var p=function(e){for(var t=0;;t++)if(!(e=e.previousSibling))return t},m=function(e){var t=e.parentNode;return t&&11==t.nodeType?t.host:t},f=null,h=function(e,t,n){var a=f||(f=document.createRange());return a.setEnd(e,null==n?e.nodeValue.length:n),a.setStart(e,t||0),a},_=function(e,t,n,a){return n&&(g(e,t,n,a,-1)||g(e,t,n,a,1))},v=/^(img|br|input|textarea|hr)$/i;function g(e,t,n,a,r){for(;;){if(e==n&&t==a)return!0;if(t==(r<0?0:y(e))){var i=e.parentNode;if(1!=i.nodeType||b(e)||v.test(e.nodeName)||"false"==e.contentEditable)return!1;t=p(e)+(r<0?0:1),e=i}else{if(1!=e.nodeType)return!1;if("false"==(e=e.childNodes[t+(r<0?-1:0)]).contentEditable)return!1;t=r<0?y(e):0}}}function y(e){return 3==e.nodeType?e.nodeValue.length:e.childNodes.length}function b(e){for(var t,n=e;n&&!(t=n.pmViewDesc);n=n.parentNode);return t&&t.node&&t.node.isBlock&&(t.dom==e||t.contentDOM==e)}var w=function(e){var t=e.isCollapsed;return t&&o.chrome&&e.rangeCount&&!e.getRangeAt(0).collapsed&&(t=!1),t};function x(e,t){var n=document.createEvent("Event");return n.initEvent("keydown",!0,!0),n.keyCode=e,n.key=n.code=t,n}function k(e){return{left:0,right:e.documentElement.clientWidth,top:0,bottom:e.documentElement.clientHeight}}function D(e,t){return"number"==typeof e?e:e[t]}function M(e){var t=e.getBoundingClientRect();return{left:t.left,right:t.left+e.clientWidth,top:t.top,bottom:t.top+e.clientHeight}}function S(e,t,n){for(var a=e.someProp("scrollThreshold")||0,r=e.someProp("scrollMargin")||5,i=e.dom.ownerDocument,o=n||e.dom;o;o=m(o))if(1==o.nodeType){var s=o==i.body||1!=o.nodeType,l=s?k(i):M(o),c=0,d=0;if(t.topl.bottom-D(a,"bottom")&&(d=t.bottom-l.bottom+D(r,"bottom")),t.leftl.right-D(a,"right")&&(c=t.right-l.right+D(r,"right")),c||d)if(s)i.defaultView.scrollBy(c,d);else{var u=o.scrollLeft,p=o.scrollTop;d&&(o.scrollTop+=d),c&&(o.scrollLeft+=c);var f=o.scrollLeft-u,h=o.scrollTop-p;t={left:t.left-f,top:t.top-h,right:t.right-f,bottom:t.bottom-h}}if(s)break}}function C(e){for(var t=[],n=e.ownerDocument;e&&(t.push({dom:e,top:e.scrollTop,left:e.scrollLeft}),e!=n);e=m(e));return t}function L(e,t){for(var n=0;n=s){o=Math.max(p.bottom,o),s=Math.min(p.top,s);var m=p.left>t.left?p.left-t.left:p.right=(p.left+p.right)/2?1:0));continue}}!n&&(t.left>=p.right&&t.top>=p.top||t.left>=p.left&&t.top>=p.bottom)&&(i=c+1)}}return n&&3==n.nodeType?function(e,t){for(var n=e.nodeValue.length,a=document.createRange(),r=0;r=(i.left+i.right)/2?1:0)}}return{node:e,offset:0}}(n,a):!n||r&&1==n.nodeType?{node:e,offset:i}:O(n,a)}function E(e,t){return e.left>=t.left-1&&e.left<=t.right+1&&e.top>=t.top-1&&e.top<=t.bottom+1}function A(e,t,n){var a=e.childNodes.length;if(a&&n.topt.top&&i++}r==e.dom&&i==r.childNodes.length-1&&1==r.lastChild.nodeType&&t.top>r.lastChild.getBoundingClientRect().bottom?d=e.state.doc.content.size:0!=i&&1==r.nodeType&&"BR"==r.childNodes[i-1].nodeName||(d=function(e,t,n,a){for(var r=-1,i=t;i!=e.dom;){var o=e.docView.nearestDesc(i,!0);if(!o)return null;if(o.node.isBlock&&o.parent){var s=o.dom.getBoundingClientRect();if(s.left>a.left||s.top>a.top)r=o.posBefore;else{if(!(s.right-1?r:e.docView.posFromDOM(t,n)}(e,r,i,t))}null==d&&(d=function(e,t,n){var a=O(t,n),r=a.node,i=a.offset,o=-1;if(1==r.nodeType&&!r.firstChild){var s=r.getBoundingClientRect();o=s.left!=s.right&&n.left>(s.left+s.right)/2?1:-1}return e.docView.posFromDOM(r,i,o)}(e,u,t));var h=e.docView.nearestDesc(u,!0);return{pos:d,inside:h?h.posAtStart-h.border:-1}}function P(e,t){var n=e.getClientRects();return n.length?n[t<0?0:n.length-1]:e.getBoundingClientRect()}var $=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;function Y(e,t,n){var a=e.docView.domFromPos(t),r=a.node,i=a.offset,s=e.state.doc.resolve(t),l=s.parent.inlineContent,c=o.webkit||o.gecko;if(3==r.nodeType&&c&&$.test(r.nodeValue)){var d=P(h(r,i,i),n);if(o.gecko&&i&&/\s/.test(r.nodeValue[i-1])&&i=0&&i==y(r)&&r!=f;)i=p(r)+1,r=r.parentNode}if(3==r.nodeType)return n<0?z(P(h(r,i-1,i),1),!1):z(P(h(r,i,i+1),-1),!0);if(!l){if(i&&(n<0||i==y(r))){var _=r.childNodes[i-1];if(1==_.nodeType)return N(_.getBoundingClientRect(),!1)}if(i=0)}if(i&&(n<0||i==y(r))){var g=r.childNodes[i-1],b=3==g.nodeType?h(g,y(g)-(c?0:1)):1==g.nodeType&&"BR"!=g.nodeName?g:null;if(b)return z(P(b,1),!1)}if(i=0)}function z(e,t){if(0==e.width)return e;var n=t?e.left:e.right;return{top:e.top,bottom:e.bottom,left:n,right:n}}function N(e,t){if(0==e.height)return e;var n=t?e.top:e.bottom;return{top:n,bottom:n,left:e.left,right:e.right}}function I(e,t,n){var a=e.state,r=e.root.activeElement;a!=t&&e.updateState(t),r!=e.dom&&e.focus();try{return n()}finally{a!=t&&e.updateState(a),r!=e.dom&&r&&r.focus()}}var F=/[\u0590-\u08ac]/,H=null,R=null,B=!1;function q(e,t,n){return H==t&&R==n?B:(H=t,R=n,B="up"==n||"down"==n?function(e,t,n){var a=t.selection,r="up"==n?a.$anchor.min(a.$head):a.$anchor.max(a.$head);return I(e,t,(function(){for(var t=e.docView.domFromPos(r.pos).node;;){var a=e.docView.nearestDesc(t,!0);if(!a)break;if(a.node.isBlock){t=a.dom;break}t=a.dom.parentNode}for(var i=Y(e,r.pos,1),o=t.firstChild;o;o=o.nextSibling){var s=void 0;if(1==o.nodeType)s=o.getClientRects();else{if(3!=o.nodeType)continue;s=h(o,0,o.nodeValue.length).getClientRects()}for(var l=0;lc.top&&("up"==n?c.bottomi.bottom-1))return!1}}return!0}))}(e,t,n):function(e,t,n){var a=t.selection.$head;if(!a.parent.isTextblock)return!1;var r=a.parentOffset,i=!r,o=r==a.parent.content.size,s=getSelection();return F.test(a.parent.textContent)&&s.modify?I(e,t,(function(){var t=s.getRangeAt(0),r=s.focusNode,i=s.focusOffset,o=s.caretBidiLevel;s.modify("move",n,"character");var l=!(a.depth?e.docView.domAfterPos(a.before()):e.dom).contains(1==s.focusNode.nodeType?s.focusNode:s.focusNode.parentNode)||r==s.focusNode&&i==s.focusOffset;return s.removeAllRanges(),s.addRange(t),null!=o&&(s.caretBidiLevel=o),l})):"left"==n||"backward"==n?i:o}(e,t,n))}var V=function(e,t,n,a){this.parent=e,this.children=t,this.dom=n,n.pmViewDesc=this,this.contentDOM=a,this.dirty=0},W={beforePosition:{configurable:!0},size:{configurable:!0},border:{configurable:!0},posBefore:{configurable:!0},posAtStart:{configurable:!0},posAfter:{configurable:!0},posAtEnd:{configurable:!0},contentLost:{configurable:!0}};V.prototype.matchesWidget=function(){return!1},V.prototype.matchesMark=function(){return!1},V.prototype.matchesNode=function(){return!1},V.prototype.matchesHack=function(){return!1},W.beforePosition.get=function(){return!1},V.prototype.parseRule=function(){return null},V.prototype.stopEvent=function(){return!1},W.size.get=function(){for(var e=0,t=0;t0:s)?this.posAtEnd:this.posAtStart},V.prototype.nearestDesc=function(e,t){for(var n=!0,a=e;a;a=a.parentNode){var r=this.getDesc(a);if(r&&(!t||r.node)){if(!n||!r.nodeDOM||(1==r.nodeDOM.nodeType?r.nodeDOM.contains(1==e.nodeType?e:e.parentNode):r.nodeDOM==e))return r;n=!1}}},V.prototype.getDesc=function(e){for(var t=e.pmViewDesc,n=t;n;n=n.parent)if(n==this)return t},V.prototype.posFromDOM=function(e,t,n){for(var a=e;a;a=a.parentNode){var r=this.getDesc(a);if(r)return r.localPosFromDOM(e,t,n)}return-1},V.prototype.descAt=function(e){for(var t=0,n=0;t=c&&t<=l-s.border&&s.node&&s.contentDOM&&this.contentDOM.contains(s.contentDOM))return s.parseRange(e,t,c);e=i;for(var d=o;d>0;d--){var u=this.children[d-1];if(u.size&&u.dom.parentNode==this.contentDOM&&!u.emptyChildAt(1)){a=p(u.dom)+1;break}e-=u.size}-1==a&&(a=0)}if(a>-1&&(l>t||o==this.children.length-1)){t=l;for(var m=o+1;ml&&it){var g=u;u=p,p=g}var y=document.createRange();y.setEnd(p.node,p.offset),y.setStart(u.node,u.offset),m.removeAllRanges(),m.addRange(y)}}},V.prototype.ignoreMutation=function(e){return!this.contentDOM&&"selection"!=e.type},W.contentLost.get=function(){return this.contentDOM&&this.contentDOM!=this.dom&&!this.dom.contains(this.contentDOM)},V.prototype.markDirty=function(e,t){for(var n=0,a=0;a=n:en){var o=n+r.border,s=i-r.border;if(e>=o&&t<=s)return this.dirty=e==n||t==i?2:1,void(e!=o||t!=s||!r.contentLost&&r.dom.parentNode==this.contentDOM?r.markDirty(e-o,t-o):r.dirty=3);r.dirty=3}n=i}this.dirty=2},V.prototype.markParentsDirty=function(){for(var e=1,t=this.parent;t;t=t.parent,e++){var n=1==e?2:1;t.dirty0&&(i=me(i,0,e,a));for(var s=0;si;)s.push(r[o++]);var _=i+m.nodeSize;if(m.isText){var v=_;o=0&&!s&&l.syncToMarks(o==n.node.childCount?r.Mark.none:n.node.child(o).marks,a,e),l.placeWidget(t,e,i)}),(function(t,n,r,o){l.syncToMarks(t.marks,a,e),l.findNodeMatch(t,n,r,o)||l.updateNextNode(t,n,r,e,o)||l.addNode(t,n,r,e,i),i+=t.nodeSize})),l.syncToMarks(U,a,e),this.node.isTextblock&&l.addTextblockHacks(),l.destroyRest(),(l.changed||2==this.dirty)&&(s&&this.protectLocalComposition(e,s),ne(this.contentDOM,this.children,e),o.ios&&function(e){if("UL"==e.nodeName||"OL"==e.nodeName){var t=e.style.cssText;e.style.cssText=t+"; list-style: square !important",window.getComputedStyle(e).listStyle,e.style.cssText=t}}(this.dom))},t.prototype.localCompositionNode=function(e,t){var n=e.state.selection,r=n.from,i=n.to;if(!(!(e.state.selection instanceof a.TextSelection)||rt+this.node.content.size)){var o=e.root.getSelection(),s=function(e,t){for(;;){if(3==e.nodeType)return e;if(1==e.nodeType&&t>0){if(e.childNodes.length>t&&3==e.childNodes[t].nodeType)return e.childNodes[t];t=y(e=e.childNodes[t-1])}else{if(!(1==e.nodeType&&t=n){var d=l.lastIndexOf(t,a-s);if(d>=0&&d+t.length+s>=n)return s+d}}}return-1}(this.node.content,l,r-t,i-t);return c<0?null:{node:s,pos:c,text:l}}}},t.prototype.protectLocalComposition=function(e,t){var n=t.node,a=t.pos,r=t.text;if(!this.getDesc(n)){for(var i=n;i.parentNode!=this.contentDOM;i=i.parentNode){for(;i.previousSibling;)i.parentNode.removeChild(i.previousSibling);for(;i.nextSibling;)i.parentNode.removeChild(i.nextSibling);i.pmViewDesc&&(i.pmViewDesc=null)}var o=new Z(this,i,n,r);e.compositionNodes.push(o),this.children=me(this.children,a,a+r.length,e,o)}},t.prototype.update=function(e,t,n,a){return!(3==this.dirty||!e.sameMarkup(this.node)||(this.updateInner(e,t,n,a),0))},t.prototype.updateInner=function(e,t,n,a){this.updateOuterDeco(t),this.node=e,this.innerDeco=n,this.contentDOM&&this.updateChildren(a,this.posAtStart),this.dirty=0},t.prototype.updateOuterDeco=function(e){if(!ce(e,this.outerDeco)){var t=1!=this.nodeDOM.nodeType,n=this.dom;this.dom=oe(this.dom,this.nodeDOM,ie(this.outerDeco,this.node,t),ie(e,this.node,t)),this.dom!=n&&(n.pmViewDesc=null,this.dom.pmViewDesc=this),this.outerDeco=e}},t.prototype.selectNode=function(){this.nodeDOM.classList.add("ProseMirror-selectednode"),!this.contentDOM&&this.node.type.spec.draggable||(this.dom.draggable=!0)},t.prototype.deselectNode=function(){this.nodeDOM.classList.remove("ProseMirror-selectednode"),!this.contentDOM&&this.node.type.spec.draggable||this.dom.removeAttribute("draggable")},Object.defineProperties(t.prototype,n),t}(V);function X(e,t,n,a,r){return le(a,t,e),new J(null,e,t,n,a,a,a,r,0)}var Q=function(e){function t(t,n,a,r,i,o,s){e.call(this,t,n,a,r,i,null,o,s)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.parseRule=function(){for(var e=this.nodeDOM.parentNode;e&&e!=this.dom&&!e.pmIsDeco;)e=e.parentNode;return{skip:e||!0}},t.prototype.update=function(e,t,n,a){return!(3==this.dirty||0!=this.dirty&&!this.inParent()||!e.sameMarkup(this.node)||(this.updateOuterDeco(t),0==this.dirty&&e.text==this.node.text||e.text==this.nodeDOM.nodeValue||(this.nodeDOM.nodeValue=e.text,a.trackWrites==this.nodeDOM&&(a.trackWrites=null)),this.node=e,this.dirty=0,0))},t.prototype.inParent=function(){for(var e=this.parent.contentDOM,t=this.nodeDOM;t;t=t.parentNode)if(t==e)return!0;return!1},t.prototype.domFromPos=function(e){return{node:this.nodeDOM,offset:e}},t.prototype.localPosFromDOM=function(t,n,a){return t==this.nodeDOM?this.posAtStart+Math.min(n,this.node.text.length):e.prototype.localPosFromDOM.call(this,t,n,a)},t.prototype.ignoreMutation=function(e){return"characterData"!=e.type&&"selection"!=e.type},t.prototype.slice=function(e,n,a){var r=this.node.cut(e,n),i=document.createTextNode(r.text);return new t(this.parent,r,this.outerDeco,this.innerDeco,i,i,a)},t}(J),ee=function(e){function t(){e.apply(this,arguments)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.parseRule=function(){return{ignore:!0}},t.prototype.matchesHack=function(){return 0==this.dirty},t}(V),te=function(e){function t(t,n,a,r,i,o,s,l,c,d){e.call(this,t,n,a,r,i,o,s,c,d),this.spec=l}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.update=function(t,n,a,r){if(3==this.dirty)return!1;if(this.spec.update){var i=this.spec.update(t,n);return i&&this.updateInner(t,n,a,r),i}return!(!this.contentDOM&&!t.isLeaf)&&e.prototype.update.call(this,t,n,a,r)},t.prototype.selectNode=function(){this.spec.selectNode?this.spec.selectNode():e.prototype.selectNode.call(this)},t.prototype.deselectNode=function(){this.spec.deselectNode?this.spec.deselectNode():e.prototype.deselectNode.call(this)},t.prototype.setSelection=function(t,n,a,r){this.spec.setSelection?this.spec.setSelection(t,n,a):e.prototype.setSelection.call(this,t,n,a,r)},t.prototype.destroy=function(){this.spec.destroy&&this.spec.destroy(),e.prototype.destroy.call(this)},t.prototype.stopEvent=function(e){return!!this.spec.stopEvent&&this.spec.stopEvent(e)},t.prototype.ignoreMutation=function(t){return this.spec.ignoreMutation?this.spec.ignoreMutation(t):e.prototype.ignoreMutation.call(this,t)},t}(J);function ne(e,t,n){for(var a=e.firstChild,r=!1,i=0;i0&&r>=0;r--){var i=t[r],o=i.node;if(o){if(o!=e.child(a-1))break;n.push(i),--a}}return{nodes:n.reverse(),offset:a}}(e.node.content,e.children);this.preMatched=n.nodes,this.preMatchOffset=n.offset};function pe(e,t){return e.type.side-t.type.side}function me(e,t,n,a,r){for(var i=[],o=0,s=0;o=n||d<=t?i.push(l):(cn&&i.push(l.slice(n-c,l.size,a)))}return i}function fe(e,t){var n=e.root.getSelection(),r=e.state.doc;if(!n.focusNode)return null;var i=e.docView.nearestDesc(n.focusNode),o=i&&0==i.size,s=e.docView.posFromDOM(n.focusNode,n.focusOffset);if(s<0)return null;var l,c,d=r.resolve(s);if(w(n)){for(l=d;i&&!i.node;)i=i.parent;if(i&&i.node.isAtom&&a.NodeSelection.isSelectable(i.node)&&i.parent&&(!i.node.isInline||!function(e,t,n){for(var a=0==t,r=t==y(e);a||r;){if(e==n)return!0;var i=p(e);if(!(e=e.parentNode))return!1;a=a&&0==i,r=r&&i==y(e)}}(n.focusNode,n.focusOffset,i.dom))){var u=i.posBefore;c=new a.NodeSelection(s==u?d:r.resolve(u))}}else{var m=e.docView.posFromDOM(n.anchorNode,n.anchorOffset);if(m<0)return null;l=r.resolve(m)}return c||(c=xe(e,l,d,"pointer"==t||e.state.selection.head=this.preMatchOffset?this.preMatched[e-this.preMatchOffset]:null},ue.prototype.destroyBetween=function(e,t){if(e!=t){for(var n=e;n>1,i=Math.min(r,e.length);a-1)o>this.index&&(this.changed=!0,this.destroyBetween(this.index,o)),this.top=this.top.children[this.index];else{var l=G.create(this.top,e[r],t,n);this.top.children.splice(this.index,0,l),this.top=l,this.changed=!0}this.index=0,r++}},ue.prototype.findNodeMatch=function(e,t,n,a){var r=-1,i=a<0?void 0:this.getPreMatch(a),o=this.top.children;if(i&&i.matchesNode(e,t,n))r=o.indexOf(i);else for(var s=this.index,l=Math.min(o.length,s+5);s-1&&s+this.preMatchOffset!=r)return!1;var l=o.dom;if((!this.lock||!(l==this.lock||1==l.nodeType&&l.contains(this.lock.parentNode))||e.isText&&o.node&&o.node.isText&&o.nodeDOM.nodeValue==e.text&&3!=o.dirty&&ce(t,o.outerDeco))&&o.update(e,t,n,a))return this.destroyBetween(this.index,i),o.dom!=l&&(this.changed=!0),this.index++,!0;break}}return!1},ue.prototype.addNode=function(e,t,n,a,r){this.top.children.splice(this.index++,0,J.create(this.top,e,t,n,a,r)),this.changed=!0},ue.prototype.placeWidget=function(e,t,n){var a=this.index0?r.max(i):r.min(i),s=o.parent.inlineContent?o.depth?e.doc.resolve(t>0?o.after():o.before()):null:o;return s&&a.Selection.findFrom(s,t)}function Me(e,t){return e.dispatch(e.state.tr.setSelection(t).scrollIntoView()),!0}function Se(e,t,n){var r=e.state.selection;if(!(r instanceof a.TextSelection)){if(r instanceof a.NodeSelection&&r.node.isInline)return Me(e,new a.TextSelection(t>0?r.$to:r.$from));var i=De(e.state,t);return!!i&&Me(e,i)}if(!r.empty||n.indexOf("s")>-1)return!1;if(e.endOfTextblock(t>0?"right":"left")){var s=De(e.state,t);return!!(s&&s instanceof a.NodeSelection)&&Me(e,s)}if(!(o.mac&&n.indexOf("m")>-1)){var l,c=r.$head,d=c.textOffset?null:t<0?c.nodeBefore:c.nodeAfter;if(!d||d.isText)return!1;var u=t<0?c.pos-d.nodeSize:c.pos;return!!(d.isAtom||(l=e.docView.descAt(u))&&!l.contentDOM)&&(a.NodeSelection.isSelectable(d)?Me(e,new a.NodeSelection(t<0?e.state.doc.resolve(c.pos-d.nodeSize):c)):!!o.webkit&&Me(e,new a.TextSelection(e.state.doc.resolve(t<0?u:u+d.nodeSize))))}}function Ce(e){return 3==e.nodeType?e.nodeValue.length:e.childNodes.length}function Le(e){var t=e.pmViewDesc;return t&&0==t.size&&(e.nextSibling||"BR"!=e.nodeName)}function Te(e){var t=e.root.getSelection(),n=t.focusNode,a=t.focusOffset;if(n){var r,i,s=!1;for(o.gecko&&1==n.nodeType&&a0){if(1!=n.nodeType)break;var l=n.childNodes[a-1];if(Le(l))r=n,i=--a;else{if(3!=l.nodeType)break;a=(n=l).nodeValue.length}}else{if(Ee(n))break;for(var c=n.previousSibling;c&&Le(c);)r=n.parentNode,i=p(c),c=c.previousSibling;if(c)a=Ce(n=c);else{if((n=n.parentNode)==e.dom)break;a=0}}s?Ae(e,t,n,a):r&&Ae(e,t,r,i)}}function Oe(e){var t=e.root.getSelection(),n=t.focusNode,a=t.focusOffset;if(n){for(var r,i,o=Ce(n);;)if(a-1)return!1;if(o.mac&&n.indexOf("m")>-1)return!1;var i=r.$from,s=r.$to;if(!i.parent.inlineContent||e.endOfTextblock(t<0?"up":"down")){var l=De(e.state,t);if(l&&l instanceof a.NodeSelection)return Me(e,l)}if(!i.parent.inlineContent){var c=a.Selection.findFrom(t<0?i:s,t);return!c||Me(e,c)}return!1}function Pe(e,t){if(!(e.state.selection instanceof a.TextSelection))return!0;var n=e.state.selection,r=n.$head,i=n.$anchor,o=n.empty;if(!r.sameParent(i))return!0;if(!o)return!1;if(e.endOfTextblock(t>0?"forward":"backward"))return!0;var s=!r.textOffset&&(t<0?r.nodeBefore:r.nodeAfter);if(s&&!s.isText){var l=e.state.tr;return t<0?l.delete(r.pos-s.nodeSize,r.pos):l.delete(r.pos,r.pos+s.nodeSize),e.dispatch(l),!0}return!1}function $e(e,t,n){e.domObserver.stop(),t.contentEditable=n,e.domObserver.start()}function Ye(e,t){var n=t.keyCode,a=function(e){var t="";return e.ctrlKey&&(t+="c"),e.metaKey&&(t+="m"),e.altKey&&(t+="a"),e.shiftKey&&(t+="s"),t}(t);return 8==n||o.mac&&72==n&&"c"==a?Pe(e,-1)||Te(e):46==n||o.mac&&68==n&&"c"==a?Pe(e,1)||Oe(e):13==n||27==n||(37==n?Se(e,-1,a)||Te(e):39==n?Se(e,1,a)||Oe(e):38==n?je(e,-1,a)||Te(e):40==n?function(e){if(o.safari&&!(e.state.selection.$head.parentOffset>0)){var t=e.root.getSelection(),n=t.focusNode,a=t.focusOffset;if(n&&1==n.nodeType&&0==a&&n.firstChild&&"false"==n.firstChild.contentEditable){var r=n.firstChild;$e(e,r,!0),setTimeout((function(){return $e(e,r,!1)}),20)}}}(e)||je(e,1,a)||Oe(e):a==(o.mac?"m":"c")&&(66==n||73==n||89==n||90==n))}function ze(e){var t=e.pmViewDesc;if(t)return t.parseRule();if("BR"==e.nodeName&&e.parentNode){if(o.safari&&/^(ul|ol)$/i.test(e.parentNode.nodeName)){var n=document.createElement("div");return n.appendChild(document.createElement("li")),{skip:n}}if(e.parentNode.lastChild==e||o.safari&&/^(tr|table)$/i.test(e.parentNode.nodeName))return{ignore:!0}}else if("IMG"==e.nodeName&&e.getAttribute("mark-placeholder"))return{ignore:!0}}function Ne(e,t,n,i,s){if(t<0){var l=e.lastSelectionTime>Date.now()-50?e.lastSelectionOrigin:null,c=fe(e,l);if(c&&!e.state.selection.eq(c)){var d=e.state.tr.setSelection(c);"pointer"==l?d.setMeta("pointer",!0):"key"==l&&d.scrollIntoView(),e.dispatch(d)}}else{var u=e.state.doc.resolve(t),p=u.sharedDepth(n);t=u.before(p+1),n=e.state.doc.resolve(n).after(p+1);var m,f,h=e.state.selection,_=function(e,t,n){var a=e.docView.parseRange(t,n),i=a.node,s=a.fromOffset,l=a.toOffset,c=a.from,d=a.to,u=e.root.getSelection(),p=null,m=u.anchorNode;if(m&&e.dom.contains(1==m.nodeType?m:m.parentNode)&&(p=[{node:m,offset:u.anchorOffset}],w(u)||p.push({node:u.focusNode,offset:u.focusOffset})),o.chrome&&8===e.lastKeyCode)for(var f=l;f>s;f--){var h=i.childNodes[f-1],_=h.pmViewDesc;if("BR"==h.nodeType&&!_){l=f;break}if(!_||_.size)break}var v=e.state.doc,g=e.someProp("domParser")||r.DOMParser.fromSchema(e.state.schema),y=v.resolve(c),b=null,x=g.parse(i,{topNode:y.parent,topMatch:y.parent.contentMatchAt(y.index()),topOpen:!0,from:s,to:l,preserveWhitespace:!y.parent.type.spec.code||"full",editableContent:!0,findPositions:p,ruleFromNode:ze,context:y});if(p&&null!=p[0].pos){var k=p[0].pos,D=p[1]&&p[1].pos;null==D&&(D=k),b={anchor:k+c,head:D+c}}return{doc:x,sel:b,from:c,to:d}}(e,t,n),v=e.state.doc,g=v.slice(_.from,_.to);8===e.lastKeyCode&&Date.now()-100=s?i-a:0)+(l-s),s=i):l=l?i-a:0)+(s-l),l=i),{start:i,endA:s,endB:l}}(g.content,_.doc.content,_.from,m,f);if(!y){if(!(i&&h instanceof a.TextSelection&&!h.empty&&h.$head.sameParent(h.$anchor))||e.composing||_.sel&&_.sel.anchor!=_.sel.head){if(_.sel){var b=Ie(e,e.state.doc,_.sel);b&&!b.eq(e.state.selection)&&e.dispatch(e.state.tr.setSelection(b))}return}y={start:h.from,endA:h.to,endB:h.to}}e.domChangeCount++,e.state.selection.frome.state.selection.from&&y.start<=e.state.selection.from+2?y.start=e.state.selection.from:y.endA=e.state.selection.to-2&&(y.endB+=e.state.selection.to-y.endA,y.endA=e.state.selection.to)),o.ie&&o.ie_version<=11&&y.endB==y.start+1&&y.endA==y.start&&y.start>_.from&&"  "==_.doc.textBetween(y.start-_.from-1,y.start-_.from+1)&&(y.start--,y.endA--,y.endB--);var k,D=_.doc.resolveNoCache(y.start-_.from),M=_.doc.resolveNoCache(y.endB-_.from),S=D.sameParent(M)&&D.parent.inlineContent;if((o.ios&&e.lastIOSEnter>Date.now()-225&&(!S||s.some((function(e){return"DIV"==e.nodeName||"P"==e.nodeName})))||!S&&D.pos<_.doc.content.size&&(k=a.Selection.findFrom(_.doc.resolve(D.pos+1),1,!0))&&k.head==M.pos)&&e.someProp("handleKeyDown",(function(t){return t(e,x(13,"Enter"))})))e.lastIOSEnter=0;else if(e.state.selection.anchor>y.start&&function(e,t,n,a,r){if(!a.parent.isTextblock||n-t<=r.pos-a.pos||Fe(a,!0,!1)n||Fe(o,!0,!1)t.content.size?null:xe(e,t.resolve(n.anchor),t.resolve(n.head))}function Fe(e,t,n){for(var a=e.depth,r=t?e.end():e.pos;a>0&&(t||e.indexAfter(a)==e.node(a).childCount);)a--,r++,t=!1;if(n)for(var i=e.node(a).maybeChild(e.indexAfter(a));i&&!i.isLeaf;)i=i.firstChild,r++;return r}function He(e,t){for(var n=[],a=t.content,i=t.openStart,o=t.openEnd;i>1&&o>1&&1==a.childCount&&1==a.firstChild.childCount;){i--,o--;var s=a.firstChild;n.push(s.type.name,s.attrs!=s.type.defaultAttrs?s.attrs:null),a=s.content}var l=e.someProp("clipboardSerializer")||r.DOMSerializer.fromSchema(e.state.schema),c=Ze(),d=c.createElement("div");d.appendChild(l.serializeFragment(a,{document:c}));for(var u,p=d.firstChild;p&&1==p.nodeType&&(u=Ue[p.nodeName.toLowerCase()]);){for(var m=u.length-1;m>=0;m--){for(var f=c.createElement(u[m]);d.firstChild;)f.appendChild(d.firstChild);d.appendChild(f)}p=d.firstChild}return p&&1==p.nodeType&&p.setAttribute("data-pm-slice",i+" "+o+" "+JSON.stringify(n)),{dom:d,text:e.someProp("clipboardTextSerializer",(function(e){return e(t)}))||t.content.textBetween(0,t.content.size,"\n\n")}}function Re(e,t,n,a,i){var o,s,l=i.parent.type.spec.code;if(!n&&!t)return null;var c=t&&(a||l||!n);if(c){if(e.someProp("transformPastedText",(function(e){t=e(t,l||a)})),l)return new r.Slice(r.Fragment.from(e.state.schema.text(t)),0,0);var d=e.someProp("clipboardTextParser",(function(e){return e(t,i,a)}));d?s=d:(o=document.createElement("div"),t.trim().split(/(?:\r\n?|\n)+/).forEach((function(e){o.appendChild(document.createElement("p")).textContent=e})))}else e.someProp("transformPastedHTML",(function(e){n=e(n)})),o=function(e){var t=/(\s*]*>)*/.exec(e);t&&(e=e.slice(t[0].length));var n,a=Ze().createElement("div"),r=/(?:]*>)*<([a-z][^>\s]+)/i.exec(e),i=0;(n=r&&Ue[r[1].toLowerCase()])&&(e=n.map((function(e){return"<"+e+">"})).join("")+e+n.map((function(e){return""})).reverse().join(""),i=n.length),a.innerHTML=e;for(var o=0;o=0;l-=2){var c=a.nodes[n[l]];if(!c||c.hasRequiredAttrs())break;i=r.Fragment.from(c.create(n[l+1],i)),o++,s++}return new r.Slice(i,o,s)}(function(e,t,n){return t=0;a--){var i=n(a);if(i)return i.v}return e}(s.content,i),!1),e.someProp("transformPasted",(function(e){s=e(s)})),s}function Be(e,t,n){void 0===n&&(n=0);for(var a=t.length-1;a>=n;a--)e=t[a].create(null,r.Fragment.from(e));return e}function qe(e,t,n,a,i){if(i=n&&(l=t<0?s.contentMatchAt(0).fillBefore(l,e.childCount>1||o<=i).append(l):l.append(s.contentMatchAt(s.childCount).fillBefore(r.Fragment.empty,!0))),e.replaceChild(t<0?0:e.childCount-1,s.copy(l))}var Ue={thead:["table"],tbody:["table"],tfoot:["table"],caption:["table"],colgroup:["table"],col:["table","colgroup"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","tbody","tr"]},Ke=null;function Ze(){return Ke||(Ke=document.implementation.createHTMLDocument("title"))}var Ge={childList:!0,characterData:!0,characterDataOldValue:!0,attributes:!0,attributeOldValue:!0,subtree:!0},Je=o.ie&&o.ie_version<=11,Xe=function(){this.anchorNode=this.anchorOffset=this.focusNode=this.focusOffset=null};Xe.prototype.set=function(e){this.anchorNode=e.anchorNode,this.anchorOffset=e.anchorOffset,this.focusNode=e.focusNode,this.focusOffset=e.focusOffset},Xe.prototype.eq=function(e){return e.anchorNode==this.anchorNode&&e.anchorOffset==this.anchorOffset&&e.focusNode==this.focusNode&&e.focusOffset==this.focusOffset};var Qe=function(e,t){var n=this;this.view=e,this.handleDOMChange=t,this.queue=[],this.flushingSoon=-1,this.observer=window.MutationObserver&&new window.MutationObserver((function(e){for(var t=0;te.target.nodeValue.length}))?n.flushSoon():n.flush()})),this.currentSelection=new Xe,Je&&(this.onCharData=function(e){n.queue.push({target:e.target,type:"characterData",oldValue:e.prevValue}),n.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.suppressingSelectionUpdates=!1};Qe.prototype.flushSoon=function(){var e=this;this.flushingSoon<0&&(this.flushingSoon=window.setTimeout((function(){e.flushingSoon=-1,e.flush()}),20))},Qe.prototype.forceFlush=function(){this.flushingSoon>-1&&(window.clearTimeout(this.flushingSoon),this.flushingSoon=-1,this.flush())},Qe.prototype.start=function(){this.observer&&this.observer.observe(this.view.dom,Ge),Je&&this.view.dom.addEventListener("DOMCharacterDataModified",this.onCharData),this.connectSelection()},Qe.prototype.stop=function(){var e=this;if(this.observer){var t=this.observer.takeRecords();if(t.length){for(var n=0;n-1)){var e=this.observer?this.observer.takeRecords():[];this.queue.length&&(e=this.queue.concat(e),this.queue.length=0);var t=this.view.root.getSelection(),n=!this.suppressingSelectionUpdates&&!this.currentSelection.eq(t)&&ke(this.view)&&!this.ignoreSelectionChange(t),a=-1,r=-1,i=!1,s=[];if(this.view.editable)for(var l=0;l1){var d=s.filter((function(e){return"BR"==e.nodeName}));if(2==d.length){var u=d[0],p=d[1];u.parentNode&&u.parentNode.parentNode==p.parentNode?p.remove():u.remove()}}(a>-1||n)&&(a>-1&&(this.view.docView.markDirty(a,r),m=this.view,et||(et=!0,"normal"==getComputedStyle(m.dom).whiteSpace&&console.warn("ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package."))),this.handleDOMChange(a,r,i,s),this.view.docView.dirty?this.view.updateState(this.view.state):this.currentSelection.eq(t)||he(this.view))}var m},Qe.prototype.registerMutation=function(e,t){if(t.indexOf(e.target)>-1)return null;var n=this.view.docView.nearestDesc(e.target);if("attributes"==e.type&&(n==this.view.docView||"contenteditable"==e.attributeName||"style"==e.attributeName&&!e.oldValue&&!e.target.getAttribute("style")))return null;if(!n||n.ignoreMutation(e))return null;if("childList"==e.type){var a=e.previousSibling,r=e.nextSibling;if(o.ie&&o.ie_version<=11&&e.addedNodes.length)for(var i=0;ii.depth?t(e,n,i.nodeAfter,i.before(a),r,!0):t(e,n,i.node(a),i.before(a),r,!1)})))return{v:!0}},s=i.depth+1;s>0;s--){var l=o(s);if(l)return l.v}return!1}function lt(e,t,n){e.focused||e.focus();var a=e.state.tr.setSelection(t);"pointer"==n&&a.setMeta("pointer",!0),e.dispatch(a)}function ct(e,t,n,r,i){return st(e,"handleClickOn",t,n,r)||e.someProp("handleClick",(function(n){return n(e,t,r)}))||(i?function(e,t){if(-1==t)return!1;var n,r,i=e.state.selection;i instanceof a.NodeSelection&&(n=i.node);for(var o=e.state.doc.resolve(t),s=o.depth+1;s>0;s--){var l=s>o.depth?o.nodeAfter:o.node(s);if(a.NodeSelection.isSelectable(l)){r=n&&i.$from.depth>0&&s>=i.$from.depth&&o.before(i.$from.depth+1)==i.$from.pos?o.before(i.$from.depth):o.before(s);break}}return null!=r&&(lt(e,a.NodeSelection.create(e.state.doc,r),"pointer"),!0)}(e,n):function(e,t){if(-1==t)return!1;var n=e.state.doc.resolve(t),r=n.nodeAfter;return!!(r&&r.isAtom&&a.NodeSelection.isSelectable(r))&&(lt(e,new a.NodeSelection(n),"pointer"),!0)}(e,n))}function dt(e,t,n,a){return st(e,"handleDoubleClickOn",t,n,a)||e.someProp("handleDoubleClick",(function(n){return n(e,t,a)}))}function ut(e,t,n,r){return st(e,"handleTripleClickOn",t,n,r)||e.someProp("handleTripleClick",(function(n){return n(e,t,r)}))||function(e,t){var n=e.state.doc;if(-1==t)return!!n.inlineContent&&(lt(e,a.TextSelection.create(n,0,n.content.size),"pointer"),!0);for(var r=n.resolve(t),i=r.depth+1;i>0;i--){var o=i>r.depth?r.nodeAfter:r.node(i),s=r.before(i);if(o.inlineContent)lt(e,a.TextSelection.create(n,s+1,s+1+o.content.size),"pointer");else{if(!a.NodeSelection.isSelectable(o))continue;lt(e,a.NodeSelection.create(n,s),"pointer")}return!0}}(e,n)}function pt(e){return yt(e)}nt.keydown=function(e,t){if(e.shiftKey=16==t.keyCode||t.shiftKey,!ht(e,t))if(e.domObserver.forceFlush(),e.lastKeyCode=t.keyCode,e.lastKeyCodeTime=Date.now(),!o.ios||13!=t.keyCode||t.ctrlKey||t.altKey||t.metaKey)e.someProp("handleKeyDown",(function(n){return n(e,t)}))||Ye(e,t)?t.preventDefault():at(e,"key");else{var n=Date.now();e.lastIOSEnter=n,e.lastIOSEnterFallbackTimeout=setTimeout((function(){e.lastIOSEnter==n&&(e.someProp("handleKeyDown",(function(t){return t(e,x(13,"Enter"))})),e.lastIOSEnter=0)}),200)}},nt.keyup=function(e,t){16==t.keyCode&&(e.shiftKey=!1)},nt.keypress=function(e,t){if(!(ht(e,t)||!t.charCode||t.ctrlKey&&!t.altKey||o.mac&&t.metaKey))if(e.someProp("handleKeyPress",(function(n){return n(e,t)})))t.preventDefault();else{var n=e.state.selection;if(!(n instanceof a.TextSelection&&n.$from.sameParent(n.$to))){var r=String.fromCharCode(t.charCode);e.someProp("handleTextInput",(function(t){return t(e,n.$from.pos,n.$to.pos,r)}))||e.dispatch(e.state.tr.insertText(r).scrollIntoView()),t.preventDefault()}}};var mt=o.mac?"metaKey":"ctrlKey";tt.mousedown=function(e,t){e.shiftKey=t.shiftKey;var n=pt(e),a=Date.now(),r="singleClick";a-e.lastClick.time<500&&function(e,t){var n=t.x-e.clientX,a=t.y-e.clientY;return n*n+a*a<100}(t,e.lastClick)&&!t[mt]&&("singleClick"==e.lastClick.type?r="doubleClick":"doubleClick"==e.lastClick.type&&(r="tripleClick")),e.lastClick={time:a,x:t.clientX,y:t.clientY,type:r};var i=e.posAtCoords(ot(t));i&&("singleClick"==r?e.mouseDown=new ft(e,i,t,n):("doubleClick"==r?dt:ut)(e,i.pos,i.inside,t)?t.preventDefault():at(e,"pointer"))};var ft=function(e,t,n,r){var i,s,l=this;if(this.view=e,this.startDoc=e.state.doc,this.pos=t,this.event=n,this.flushed=r,this.selectNode=n[mt],this.allowDefault=n.shiftKey,t.inside>-1)i=e.state.doc.nodeAt(t.inside),s=t.inside;else{var c=e.state.doc.resolve(t.pos);i=c.parent,s=c.depth?c.before():0}this.mightDrag=null;var d=r?null:n.target,u=d?e.docView.nearestDesc(d,!0):null;this.target=u?u.dom:null,(i.type.spec.draggable&&!1!==i.type.spec.selectable||e.state.selection instanceof a.NodeSelection&&s==e.state.selection.from)&&(this.mightDrag={node:i,pos:s,addAttr:this.target&&!this.target.draggable,setUneditable:this.target&&o.gecko&&!this.target.hasAttribute("contentEditable")}),this.target&&this.mightDrag&&(this.mightDrag.addAttr||this.mightDrag.setUneditable)&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&(this.target.draggable=!0),this.mightDrag.setUneditable&&setTimeout((function(){return l.target.setAttribute("contentEditable","false")}),20),this.view.domObserver.start()),e.root.addEventListener("mouseup",this.up=this.up.bind(this)),e.root.addEventListener("mousemove",this.move=this.move.bind(this)),at(e,"pointer")};function ht(e,t){return!!e.composing||!!(o.safari&&Math.abs(t.timeStamp-e.compositionEndedAt)<500)&&(e.compositionEndedAt=-2e8,!0)}ft.prototype.done=function(){this.view.root.removeEventListener("mouseup",this.up),this.view.root.removeEventListener("mousemove",this.move),this.mightDrag&&this.target&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&this.target.removeAttribute("draggable"),this.mightDrag.setUneditable&&this.target.removeAttribute("contentEditable"),this.view.domObserver.start()),this.view.mouseDown=null},ft.prototype.up=function(e){if(this.done(),this.view.dom.contains(3==e.target.nodeType?e.target.parentNode:e.target)){var t=this.pos;this.view.state.doc!=this.startDoc&&(t=this.view.posAtCoords(ot(e))),this.allowDefault||!t?at(this.view,"pointer"):ct(this.view,t.pos,t.inside,e,this.selectNode)?e.preventDefault():this.flushed||o.safari&&this.mightDrag&&!this.mightDrag.node.isAtom||o.chrome&&!(this.view.state.selection instanceof a.TextSelection)&&(t.pos==this.view.state.selection.from||t.pos==this.view.state.selection.to)?(lt(this.view,a.Selection.near(this.view.state.doc.resolve(t.pos)),"pointer"),e.preventDefault()):at(this.view,"pointer")}},ft.prototype.move=function(e){!this.allowDefault&&(Math.abs(this.event.x-e.clientX)>4||Math.abs(this.event.y-e.clientY)>4)&&(this.allowDefault=!0),at(this.view,"pointer")},tt.touchdown=function(e){pt(e),at(e,"pointer")},tt.contextmenu=function(e){return pt(e)};var _t=o.android?5e3:-1;function vt(e,t){clearTimeout(e.composingTimeout),t>-1&&(e.composingTimeout=setTimeout((function(){return yt(e)}),t))}function gt(e){for(e.composing=!1;e.compositionNodes.length>0;)e.compositionNodes.pop().markParentsDirty()}function yt(e,t){if(e.domObserver.forceFlush(),gt(e),t||e.docView.dirty){var n=fe(e);return n&&!n.eq(e.state.selection)?e.dispatch(e.state.tr.setSelection(n)):e.updateState(e.state),!0}return!1}nt.compositionstart=nt.compositionupdate=function(e){if(!e.composing){e.domObserver.flush();var t=e.state,n=t.selection.$from;if(t.selection.empty&&(t.storedMarks||!n.textOffset&&n.parentOffset&&n.nodeBefore.marks.some((function(e){return!1===e.type.spec.inclusive}))))e.markCursor=e.state.storedMarks||n.marks(),yt(e,!0),e.markCursor=null;else if(yt(e),o.gecko&&t.selection.empty&&n.parentOffset&&!n.textOffset&&n.nodeBefore.marks.length)for(var a=e.root.getSelection(),r=a.focusNode,i=a.focusOffset;r&&1==r.nodeType&&0!=i;){var s=i<0?r.lastChild:r.childNodes[i-1];if(!s)break;if(3==s.nodeType){a.collapse(s,s.nodeValue.length);break}r=s,i=-1}e.composing=!0}vt(e,_t)},nt.compositionend=function(e,t){e.composing&&(e.composing=!1,e.compositionEndedAt=t.timeStamp,vt(e,20))};var bt=o.ie&&o.ie_version<15||o.ios&&o.webkit_version<604;function wt(e,t,n,a){var i=Re(e,t,n,e.shiftKey,e.state.selection.$from);if(!e.someProp("handlePaste",(function(t){return t(e,a,i||r.Slice.empty)}))&&i){var o=function(e){return 0==e.openStart&&0==e.openEnd&&1==e.content.childCount?e.content.firstChild:null}(i),s=o?e.state.tr.replaceSelectionWith(o,e.shiftKey):e.state.tr.replaceSelection(i);e.dispatch(s.scrollIntoView().setMeta("paste",!0).setMeta("uiEvent","paste"))}}tt.copy=nt.cut=function(e,t){var n=e.state.selection,a="cut"==t.type;if(!n.empty){var r=bt?null:t.clipboardData,i=He(e,n.content()),o=i.dom,s=i.text;r?(t.preventDefault(),r.clearData(),r.setData("text/html",o.innerHTML),r.setData("text/plain",s)):function(e,t){if(e.dom.parentNode){var n=e.dom.parentNode.appendChild(document.createElement("div"));n.appendChild(t),n.style.cssText="position: fixed; left: -10000px; top: 10px";var a=getSelection(),r=document.createRange();r.selectNodeContents(t),e.dom.blur(),a.removeAllRanges(),a.addRange(r),setTimeout((function(){n.parentNode&&n.parentNode.removeChild(n),e.focus()}),50)}}(e,o),a&&e.dispatch(e.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent","cut"))}},nt.paste=function(e,t){var n=bt?null:t.clipboardData,a=n&&n.getData("text/html"),r=n&&n.getData("text/plain");n&&(a||r||n.files.length)?(wt(e,r,a,t),t.preventDefault()):function(e,t){if(e.dom.parentNode){var n=e.shiftKey||e.state.selection.$from.parent.type.spec.code,a=e.dom.parentNode.appendChild(document.createElement(n?"textarea":"div"));n||(a.contentEditable="true"),a.style.cssText="position: fixed; left: -10000px; top: 10px",a.focus(),setTimeout((function(){e.focus(),a.parentNode&&a.parentNode.removeChild(a),n?wt(e,a.value,null,t):wt(e,a.textContent,a.innerHTML,t)}),50)}}(e,t)};var xt=function(e,t){this.slice=e,this.move=t},kt=o.mac?"altKey":"ctrlKey";for(var Dt in tt.dragstart=function(e,t){var n=e.mouseDown;if(n&&n.done(),t.dataTransfer){var r=e.state.selection,i=r.empty?null:e.posAtCoords(ot(t));if(i&&i.pos>=r.from&&i.pos<=(r instanceof a.NodeSelection?r.to-1:r.to));else if(n&&n.mightDrag)e.dispatch(e.state.tr.setSelection(a.NodeSelection.create(e.state.doc,n.mightDrag.pos)));else if(t.target&&1==t.target.nodeType){var o=e.docView.nearestDesc(t.target,!0);if(!o||!o.node.type.spec.draggable||o==e.docView)return;e.dispatch(e.state.tr.setSelection(a.NodeSelection.create(e.state.doc,o.posBefore)))}var s=e.state.selection.content(),l=He(e,s),c=l.dom,d=l.text;t.dataTransfer.clearData(),t.dataTransfer.setData(bt?"Text":"text/html",c.innerHTML),bt||t.dataTransfer.setData("text/plain",d),e.dragging=new xt(s,!t[kt])}},tt.dragend=function(e){var t=e.dragging;window.setTimeout((function(){e.dragging==t&&(e.dragging=null)}),50)},nt.dragover=nt.dragenter=function(e,t){return t.preventDefault()},nt.drop=function(e,t){var n=e.dragging;if(e.dragging=null,t.dataTransfer){var o=e.posAtCoords(ot(t));if(o){var s=e.state.doc.resolve(o.pos);if(s){var l=n&&n.slice||Re(e,t.dataTransfer.getData(bt?"Text":"text/plain"),bt?null:t.dataTransfer.getData("text/html"),!1,s),c=n&&!t[kt];if(e.someProp("handleDrop",(function(n){return n(e,t,l||r.Slice.empty,c)})))t.preventDefault();else if(l){t.preventDefault();var d=l?Object(i.h)(e.state.doc,s.pos,l):s.pos;null==d&&(d=s.pos);var u=e.state.tr;c&&u.deleteSelection();var p=u.mapping.map(d),m=0==l.openStart&&0==l.openEnd&&1==l.content.childCount,f=u.doc;if(m?u.replaceRangeWith(p,p,l.content.firstChild):u.replaceRange(p,p,l),!u.doc.eq(f)){var h=u.doc.resolve(p);if(m&&a.NodeSelection.isSelectable(l.content.firstChild)&&h.nodeAfter&&h.nodeAfter.sameMarkup(l.content.firstChild))u.setSelection(new a.NodeSelection(h));else{var _=u.mapping.map(d);u.mapping.maps[u.mapping.maps.length-1].forEach((function(e,t,n,a){return _=a})),u.setSelection(xe(e,h,u.doc.resolve(_)))}e.focus(),e.dispatch(u.setMeta("uiEvent","drop"))}}}}}},tt.focus=function(e){e.focused||(e.domObserver.stop(),e.dom.classList.add("ProseMirror-focused"),e.domObserver.start(),e.focused=!0,setTimeout((function(){e.docView&&e.hasFocus()&&!e.domObserver.currentSelection.eq(e.root.getSelection())&&he(e)}),20))},tt.blur=function(e){e.focused&&(e.domObserver.stop(),e.dom.classList.remove("ProseMirror-focused"),e.domObserver.start(),e.domObserver.currentSelection.set({}),e.focused=!1)},tt.beforeinput=function(e,t){if(o.chrome&&o.android&&"deleteContentBackward"==t.inputType){var n=e.domChangeCount;setTimeout((function(){if(e.domChangeCount==n&&(e.dom.blur(),e.focus(),!e.someProp("handleKeyDown",(function(t){return t(e,x(8,"Backspace"))})))){var t=e.state.selection.$cursor;t&&t.pos>0&&e.dispatch(e.state.tr.delete(t.pos-1,t.pos).scrollIntoView())}}),50)}},nt)tt[Dt]=nt[Dt];function Mt(e,t){if(e==t)return!0;for(var n in e)if(e[n]!==t[n])return!1;for(var a in t)if(!(a in e))return!1;return!0}var St=function(e,t){this.spec=t||At,this.side=this.spec.side||0,this.toDOM=e};St.prototype.map=function(e,t,n,a){var r=e.mapResult(t.from+a,this.side<0?-1:1),i=r.pos;return r.deleted?null:new Tt(i-n,i-n,this)},St.prototype.valid=function(){return!0},St.prototype.eq=function(e){return this==e||e instanceof St&&(this.spec.key&&this.spec.key==e.spec.key||this.toDOM==e.toDOM&&Mt(this.spec,e.spec))};var Ct=function(e,t){this.spec=t||At,this.attrs=e};Ct.prototype.map=function(e,t,n,a){var r=e.map(t.from+a,this.spec.inclusiveStart?-1:1)-n,i=e.map(t.to+a,this.spec.inclusiveEnd?1:-1)-n;return r>=i?null:new Tt(r,i,this)},Ct.prototype.valid=function(e,t){return t.from=e&&(!r||r(o.spec))&&n.push(o.copy(o.from+a,o.to+a))}for(var s=0;se){var l=this.children[s]+1;this.children[s+2].findInner(e-l,t-l,n,a+l,r)}},jt.prototype.map=function(e,t,n){return this==Pt||0==e.maps.length?this:this.mapInner(e,t,0,0,n||At)},jt.prototype.mapInner=function(e,t,n,a,r){for(var i,o=0;ol+i||(t>=s[o]+i?s[o+1]=-1:n>=r&&(c=a-n-(t-e))&&(s[o]+=c,s[o+1]+=c))}},c=0;c=a.content.size){d=!0;continue}var f=n.map(e[u+1]+i,-1)-r,h=a.content.findIndex(m),_=h.index,v=h.offset,g=a.maybeChild(_);if(g&&v==m&&v+g.nodeSize==f){var y=s[u+2].mapInner(n,g,p+1,e[u]+i+1,o);y!=Pt?(s[u]=m,s[u+1]=f,s[u+2]=y):(s[u+1]=-2,d=!0)}else d=!0}if(d){var b=It(function(e,t,n,a,r,i,o){function s(e,t){for(var i=0;io&&c.to=e){this.children[r]==e&&(n=this.children[r+2]);break}for(var i=e+1,o=i+t.content.size,s=0;si&&l.type instanceof Ct){var c=Math.max(i,l.from)-i,d=Math.min(o,l.to)-i;cn&&o.to0;)t++;e.splice(t,0,n)}function Bt(e){var t=[];return e.someProp("decorations",(function(n){var a=n(e.state);a&&a!=Pt&&t.push(a)})),e.cursorWrapper&&t.push(jt.create(e.state.doc,[e.cursorWrapper.deco])),$t.from(t)}$t.prototype.forChild=function(e,t){if(t.isLeaf)return jt.empty;for(var n=[],a=0;ar.scrollToSelection?"to selection":"preserve",p=i||!this.docView.matchesNode(e.doc,d,c);!p&&e.selection.eq(r.selection)||(s=!0);var m,f,h,v,g,y,b,w,x,k,D,M="preserve"==u&&s&&null==this.dom.style.overflowAnchor&&function(e){for(var t,n,a=e.dom.getBoundingClientRect(),r=Math.max(0,a.top),i=(a.left+a.right)/2,o=r+1;o=r-20){t=s,n=l.top;break}}}return{refDOM:t,refTop:n,stack:C(e.dom)}}(this);if(s){this.domObserver.stop();var T=p&&(o.ie||o.chrome)&&!this.composing&&!r.selection.empty&&!e.selection.empty&&(v=r.selection,g=e.selection,y=Math.min(v.$anchor.sharedDepth(v.head),g.$anchor.sharedDepth(g.head)),v.$anchor.start(y)!=g.$anchor.start(y));if(p){var O=o.chrome?this.trackWrites=this.root.getSelection().focusNode:null;!i&&this.docView.update(e.doc,d,c,this)||(this.docView.updateOuterDeco([]),this.docView.destroy(),this.docView=X(e.doc,d,c,this.dom,this)),O&&!this.trackWrites&&(T=!0)}T||!(this.mouseDown&&this.domObserver.currentSelection.eq(this.root.getSelection())&&(m=this,f=m.docView.domFromPos(m.state.selection.anchor),h=m.root.getSelection(),_(f.node,f.offset,h.anchorNode,h.anchorOffset)))?he(this,T):(be(this,e.selection),this.domObserver.setCurSelection()),this.domObserver.start()}if(this.updatePluginViews(r),"reset"==u)this.dom.scrollTop=0;else if("to selection"==u){var E=this.root.getSelection().focusNode;this.someProp("handleScrollToSelection",(function(e){return e(n)}))||(e.selection instanceof a.NodeSelection?S(this,this.docView.domAfterPos(e.selection.from).getBoundingClientRect(),E):S(this,this.coordsAtPos(e.selection.head,1),E))}else M&&(w=(b=M).refDOM,x=b.refTop,k=b.stack,D=w?w.getBoundingClientRect().top:0,L(k,0==D?0:D-x))},qt.prototype.destroyPluginViews=function(){for(var e;e=this.pluginViews.pop();)e.destroy&&e.destroy()},qt.prototype.updatePluginViews=function(e){if(e&&e.plugins==this.state.plugins)for(var t=0;t=100?100:null;return e+(t[a]||t[r]||t[i])}},week:{dow:1,doy:7}})}(n("c1df"))},"5b14":function(e,t,n){!function(e){"use strict";var t="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");function n(e,t,n,a){var r=e;switch(n){case"s":return a||t?"néhány másodperc":"néhány másodperce";case"ss":return r+(a||t)?" másodperc":" másodperce";case"m":return"egy"+(a||t?" perc":" perce");case"mm":return r+(a||t?" perc":" perce");case"h":return"egy"+(a||t?" óra":" órája");case"hh":return r+(a||t?" óra":" órája");case"d":return"egy"+(a||t?" nap":" napja");case"dd":return r+(a||t?" nap":" napja");case"M":return"egy"+(a||t?" hónap":" hónapja");case"MM":return r+(a||t?" hónap":" hónapja");case"y":return"egy"+(a||t?" év":" éve");case"yy":return r+(a||t?" év":" éve")}return""}function a(e){return(e?"":"[múlt] ")+"["+t[this.day()]+"] LT[-kor]"}e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,t,n){return e<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return a.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return a.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("c1df"))},"5c3a":function(e,t,n){!function(e){"use strict";e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"下午"===t||"晚上"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var a=100*e+t;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:function(e){return e.week()!==this.week()?"[下]dddLT":"[本]dddLT"},lastDay:"[昨天]LT",lastWeek:function(e){return this.week()!==e.week()?"[上]dddLT":"[本]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s后",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",w:"1 周",ww:"%d 周",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(n("c1df"))},"5c6c":function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},"5cbb":function(e,t,n){!function(e){"use strict";e.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,t){return 12===e&&(e=0),"రాత్రి"===t?e<4?e:e+12:"ఉదయం"===t?e:"మధ్యాహ్నం"===t?e>=10?e:e+12:"సాయంత్రం"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"రాత్రి":e<10?"ఉదయం":e<17?"మధ్యాహ్నం":e<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}(n("c1df"))},"5dbe":function(e,t,n){!function(){var t;function n(e){for(var t,n,a,r,i=1,o=[].slice.call(arguments),s=0,l=e.length,c="",d=!1,u=!1,p=function(){return o[i++]},m=function(){for(var n="";/\d/.test(e[s]);)n+=e[s++],t=e[s];return n.length>0?parseInt(n):null};s=11?e:e+12},meridiem:function(e,t,n){var a=100*e+t;return a<600?"يېرىم كېچە":a<900?"سەھەر":a<1130?"چۈشتىن بۇرۇن":a<1230?"چۈش":a<1800?"چۈشتىن كېيىن":"كەچ"},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"-كۈنى";case"w":case"W":return e+"-ھەپتە";default:return e}},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:7}})}(n("c1df"))},6213:function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.default=e.exports,e.exports.__esModule=!0},6273:function(e,t,n){var a=n("a92b"),r=n("ac88");e.exports=function(e){if(!r(e))return!1;var t=a(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},"62e4":function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},6403:function(e,t,n){!function(e){"use strict";e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n("c1df"))},6547:function(e,t,n){var a=n("a691"),r=n("1d80"),i=function(e){return function(t,n){var i,o,s=String(r(t)),l=a(n),c=s.length;return l<0||l>=c?e?"":void 0:(i=s.charCodeAt(l))<55296||i>56319||l+1===c||(o=s.charCodeAt(l+1))<56320||o>57343?e?s.charAt(l):i:e?s.slice(l,l+2):o-56320+(i-55296<<10)+65536}};e.exports={codeAt:i(!1),charAt:i(!0)}},"65db":function(e,t,n){!function(e){"use strict";e.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,t,n){return e>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n("c1df"))},"65f0":function(e,t,n){var a=n("861d"),r=n("e8b5"),i=n("b622")("species");e.exports=function(e,t){var n;return r(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!r(n.prototype)?a(n)&&null===(n=n[i])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===t?0:t)}},"669c":function(e,t,n){var a=n("1ea7"),r=n("fdb1"),i=n("e3f3"),o=n("8517"),s=n("231d");function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t9?a(e%10):e}function r(e,t){return 2===t?i(e):e}function i(e){var t={m:"v",b:"v",d:"z"};return void 0===t[e.charAt(0)]?e:t[e.charAt(0)]+e.substring(1)}var o=[/^gen/i,/^c[ʼ\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],s=/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,l=/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,c=/^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,d=[/^sul/i,/^lun/i,/^meurzh/i,/^merc[ʼ\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],u=[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],p=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];e.defineLocale("br",{months:"Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:p,fullWeekdaysParse:d,shortWeekdaysParse:u,minWeekdaysParse:p,monthsRegex:s,monthsShortRegex:s,monthsStrictRegex:l,monthsShortStrictRegex:c,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warcʼhoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Decʼh da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s ʼzo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:n},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(e){return e+(1===e?"añ":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,t,n){return e<12?"a.m.":"g.m."}})}(n("c1df"))},"688b":function(e,t,n){!function(e){"use strict";e.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("c1df"))},6909:function(e,t,n){!function(e){"use strict";e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"за %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"една минута",mm:"%d минути",h:"еден час",hh:"%d часа",d:"еден ден",dd:"%d дена",M:"еден месец",MM:"%d месеци",y:"една година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}(n("c1df"))},"69d5":function(e,t,n){var a=n("cb5a"),r=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=a(t,e);return!(n<0||(n==t.length-1?t.pop():r.call(t,n,1),--this.size,0))}},"69f3":function(e,t,n){var a,r,i,o=n("7f9a"),s=n("da84"),l=n("861d"),c=n("9112"),d=n("5135"),u=n("c6cd"),p=n("f772"),m=n("d012"),f=s.WeakMap;if(o){var h=u.state||(u.state=new f),_=h.get,v=h.has,g=h.set;a=function(e,t){return t.facade=e,g.call(h,e,t),t},r=function(e){return _.call(h,e)||{}},i=function(e){return v.call(h,e)}}else{var y=p("state");m[y]=!0,a=function(e,t){return t.facade=e,c(e,y,t),t},r=function(e){return d(e,y)?e[y]:{}},i=function(e){return d(e,y)}}e.exports={set:a,get:r,has:i,enforce:function(e){return i(e)?r(e):a(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},"6af4":function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.default=e.exports,e.exports.__esModule=!0},"6cc7":function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},"6ce3":function(e,t,n){!function(e){"use strict";e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",w:"en uke",ww:"%d uker",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("c1df"))},"6d79":function(e,t,n){!function(e){"use strict";var t={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};e.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(e){var n=e%10,a=e>=100?100:null;return e+(t[e]||t[n]||t[a])},week:{dow:1,doy:7}})}(n("c1df"))},"6d83":function(e,t,n){!function(e){"use strict";e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n("c1df"))},"6e72":function(e,t,n){var a=n("902a")(n("8aed"),"Promise");e.exports=a},"6e98":function(e,t,n){!function(e){"use strict";e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){switch(this.day()){case 0:return"[La scorsa] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT";default:return"[Lo scorso] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"}},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("c1df"))},"6eeb":function(e,t,n){var a=n("da84"),r=n("9112"),i=n("5135"),o=n("ce4e"),s=n("8925"),l=n("69f3"),c=l.get,d=l.enforce,u=String(String).split("String");(e.exports=function(e,t,n,s){var l,c=!!s&&!!s.unsafe,p=!!s&&!!s.enumerable,m=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof t||i(n,"name")||r(n,"name",t),(l=d(n)).source||(l.source=u.join("string"==typeof t?t:""))),e!==a?(c?!m&&e[t]&&(p=!0):delete e[t],p?e[t]=n:r(e,t,n)):p?e[t]=n:o(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&c(this).source||s(this)}))},"6f12":function(e,t,n){!function(e){"use strict";e.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("c1df"))},"6f50":function(e,t,n){!function(e){"use strict";e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n("c1df"))},"6fcd":function(e,t,n){var a=n("50d8"),r=n("d370"),i=n("6747"),o=n("0d24"),s=n("c098"),l=n("73ac"),c=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=i(e),d=!n&&r(e),u=!n&&!d&&o(e),p=!n&&!d&&!u&&l(e),m=n||d||u||p,f=m?a(e.length,String):[],h=f.length;for(var _ in e)!t&&!c.call(e,_)||m&&("length"==_||u&&("offset"==_||"parent"==_)||p&&("buffer"==_||"byteLength"==_||"byteOffset"==_)||s(_,h))||f.push(_);return f}},"6fe6":function(e,t,n){var a=n("193e"),r=n("d3c7"),i=n("669c");e.exports=function(e,t){var n=this.__data__;if(n instanceof a){var o=n.__data__;if(!r||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new i(o)}return n.set(e,t),this.size=n.size,this}},7118:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?n[e.month()]:t[e.month()]:t},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("c1df"))},7156:function(e,t,n){var a=n("861d"),r=n("d2bb");e.exports=function(e,t,n){var i,o;return r&&"function"==typeof(i=t.constructor)&&i!==n&&a(o=i.prototype)&&o!==n.prototype&&r(e,o),e}},"716b":function(e,t,n){e.exports=function(e){function t(a){if(n[a])return n[a].exports;var r=n[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=".",t(t.s=9)}([function(e,t,n){"use strict";t.a={prefix:"",suffix:"",thousands:",",decimal:".",precision:2}},function(e,t,n){"use strict";var a=n(2),r=n(5),i=n(0);t.a=function(e,t){if(t.value){var o=n.i(r.a)(i.a,t.value);if("INPUT"!==e.tagName.toLocaleUpperCase()){var s=e.getElementsByTagName("input");1!==s.length||(e=s[0])}e.oninput=function(){var t=e.value.length-e.selectionEnd;e.value=n.i(a.a)(e.value,o),t=Math.max(t,o.suffix.length),t=e.value.length-t,t=Math.max(t,o.prefix.length+1),n.i(a.b)(e,t),e.dispatchEvent(n.i(a.c)("change"))},e.onfocus=function(){n.i(a.b)(e,e.value.length-o.suffix.length)},e.oninput(),e.dispatchEvent(n.i(a.c)("input"))}}},function(e,t,n){"use strict";function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f.a;"number"==typeof e&&(e=e.toFixed(o(t.precision)));var n=e.indexOf("-")>=0?"-":"",a=u(l(i(e),t.precision)).split("."),r=a[0],s=a[1];return r=c(r,t.thousands),t.prefix+n+d(r,s,t.decimal)+t.suffix}function r(e,t){var n=e.indexOf("-")>=0?-1:1,a=l(i(e),t);return parseFloat(a)*n}function i(e){return u(e).replace(/\D+/g,"")||"0"}function o(e){return s(0,e,20)}function s(e,t,n){return Math.max(e,Math.min(t,n))}function l(e,t){var n=Math.pow(10,t);return(parseFloat(e)/n).toFixed(o(t))}function c(e,t){return e.replace(/(\d)(?=(?:\d{3})+\b)/gm,"$1"+t)}function d(e,t,n){return t?e+n+t:e}function u(e){return e?e.toString():""}function p(e,t){var n=function(){e.setSelectionRange(t,t)};e===document.activeElement&&(n(),setTimeout(n,1))}function m(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!0),t}var f=n(0);n.d(t,"a",(function(){return a})),n.d(t,"d",(function(){return r})),n.d(t,"b",(function(){return p})),n.d(t,"c",(function(){return m}))},function(e,t,n){"use strict";function a(e,t){t&&Object.keys(t).map((function(e){s.a[e]=t[e]})),e.directive("money",o.a),e.component("money",i.a)}Object.defineProperty(t,"__esModule",{value:!0});var r=n(6),i=n.n(r),o=n(1),s=n(0);n.d(t,"Money",(function(){return i.a})),n.d(t,"VMoney",(function(){return o.a})),n.d(t,"options",(function(){return s.a})),n.d(t,"VERSION",(function(){return l}));var l="0.8.1";t.default=a,"undefined"!=typeof window&&window.Vue&&window.Vue.use(a)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=n(1),r=n(0),i=n(2);t.default={name:"Money",props:{value:{required:!0,type:[Number,String],default:0},masked:{type:Boolean,default:!1},precision:{type:Number,default:function(){return r.a.precision}},decimal:{type:String,default:function(){return r.a.decimal}},thousands:{type:String,default:function(){return r.a.thousands}},prefix:{type:String,default:function(){return r.a.prefix}},suffix:{type:String,default:function(){return r.a.suffix}}},directives:{money:a.a},data:function(){return{formattedValue:""}},watch:{value:{immediate:!0,handler:function(e,t){var a=n.i(i.a)(e,this.$props);a!==this.formattedValue&&(this.formattedValue=a)}}},methods:{change:function(e){this.$emit("input",this.masked?e.target.value:n.i(i.d)(e.target.value,this.precision))}}}},function(e,t,n){"use strict";t.a=function(e,t){return e=e||{},t=t||{},Object.keys(e).concat(Object.keys(t)).reduce((function(n,a){return n[a]=void 0===t[a]?e[a]:t[a],n}),{})}},function(e,t,n){var a=n(7)(n(4),n(8),null,null);e.exports=a.exports},function(e,t){e.exports=function(e,t,n,a){var r,i=e=e||{},o=typeof e.default;"object"!==o&&"function"!==o||(r=e,i=e.default);var s="function"==typeof i?i.options:i;if(t&&(s.render=t.render,s.staticRenderFns=t.staticRenderFns),n&&(s._scopeId=n),a){var l=s.computed||(s.computed={});Object.keys(a).forEach((function(e){var t=a[e];l[e]=function(){return t}}))}return{esModule:r,exports:i,options:s}}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("input",{directives:[{name:"money",rawName:"v-money",value:{precision:e.precision,decimal:e.decimal,thousands:e.thousands,prefix:e.prefix,suffix:e.suffix},expression:"{precision, decimal, thousands, prefix, suffix}"}],staticClass:"v-money",attrs:{type:"tel"},domProps:{value:e.formattedValue},on:{change:e.change}})},staticRenderFns:[]}},function(e,t,n){e.exports=n(3)}])},"71b8":function(e,t,n){var a=n("8ef9"),r=n("fbbc"),i=n("86c5");e.exports=function(e){return"function"!=typeof e.constructor||i(e)?{}:a(r(e))}},7260:function(e,t,n){var a=n("e005"),r=n("3307"),i=n("36a2"),o=n("0006"),s=n("44f3"),l=n("16f0"),c=a?a.prototype:void 0,d=c?c.valueOf:void 0;e.exports=function(e,t,n,a,c,u,p){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!u(new r(e),new r(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var m=s;case"[object Set]":var f=1&a;if(m||(m=l),e.size!=t.size&&!f)return!1;var h=p.get(e);if(h)return h==t;a|=2,p.set(e,t);var _=o(m(e),m(t),a,c,u,p);return p.delete(e),_;case"[object Symbol]":if(d)return d.call(e)==d.call(t)}return!1}},"72af":function(e,t,n){var a=n("99cd")();e.exports=a},"72e1":function(e,t,n){var a=n("e005"),r=Object.prototype,i=r.hasOwnProperty,o=r.toString,s=a?a.toStringTag:void 0;e.exports=function(e){var t=i.call(e,s),n=e[s];try{e[s]=void 0;var a=!0}catch(e){}var r=o.call(e);return a&&(t?e[s]=n:delete e[s]),r}},"72f0":function(e,t){e.exports=function(e){return function(){return e}}},7333:function(e,t,n){!function(e){"use strict";e.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}(n("c1df"))},"73ac":function(e,t,n){var a=n("743f"),r=n("b047"),i=n("99d3"),o=i&&i.isTypedArray,s=o?r(o):a;e.exports=s},7418:function(e,t){t.f=Object.getOwnPropertySymbols},"743f":function(e,t,n){var a=n("3729"),r=n("b218"),i=n("1310"),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,e.exports=function(e){return i(e)&&r(e.length)&&!!o[a(e)]}},"746f":function(e,t,n){var a=n("428f"),r=n("5135"),i=n("e538"),o=n("9bf2").f;e.exports=function(e){var t=a.Symbol||(a.Symbol={});r(t,e)||o(t,e,{value:i.f(e)})}},"74d4":function(e,t,n){var a=n("093e"),r=n("5438");e.exports=function(e,t,n,i){var o=!n;n||(n={});for(var s=-1,l=t.length;++s1&&e<5}function r(e,t,n,r){var i=e+" ";switch(n){case"s":return t||r?"pár sekúnd":"pár sekundami";case"ss":return t||r?i+(a(e)?"sekundy":"sekúnd"):i+"sekundami";case"m":return t?"minúta":r?"minútu":"minútou";case"mm":return t||r?i+(a(e)?"minúty":"minút"):i+"minútami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?i+(a(e)?"hodiny":"hodín"):i+"hodinami";case"d":return t||r?"deň":"dňom";case"dd":return t||r?i+(a(e)?"dni":"dní"):i+"dňami";case"M":return t||r?"mesiac":"mesiacom";case"MM":return t||r?i+(a(e)?"mesiace":"mesiacov"):i+"mesiacmi";case"y":return t||r?"rok":"rokom";case"yy":return t||r?i+(a(e)?"roky":"rokov"):i+"rokmi"}}e.defineLocale("sk",{months:t,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("c1df"))},"7c64":function(e,t,n){var a=n("e24b"),r=n("5e2e"),i=n("79bc");e.exports=function(){this.size=0,this.__data__={hash:new a,map:new(i||r),string:new a}}},"7c73":function(e,t,n){var a,r=n("825a"),i=n("37e8"),o=n("7839"),s=n("d012"),l=n("1be4"),c=n("cc12"),d=n("f772"),u=d("IE_PROTO"),p=function(){},m=function(e){return"\n\n\n","\n\n\n","\n\n\n","\n\n\n\n","\n\n\n\n\n","\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n\n","\n\n","\n\n\n","\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n","\n\n","\n\n","\n\n","\n\n","\n\n\n","\n\n\n","\n\n","\n\n","\n\n","\n\n","\n\n\n\n","\n\n\n","\n\n\n","\n\n","\n\n\n","\n\n\n","\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n","\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n","\n\n\n","\n\n\n","/**\n * First we will load all of this project's JavaScript dependencies which\n * include Vue and Vue Resource. This gives a great starting point for\n * building robust, powerful web applications using Vue and Laravel.\n */\nimport Vue from 'vue'\nimport router from './router.js'\nimport store from './store/index'\nimport utils from './helpers/utilities'\nimport i18n from './plugins/i18n'\nimport swal from 'sweetalert'\n\nrequire('./bootstrap')\n\nVue.prototype.$utils = utils\n\n/**\n * Next, we will create a fresh Vue application instance and attach it to\n * the page. Then, you may begin adding components to this application\n * or customize the JavaScript scaffolding to fit your unique needs.\n */\nwindow.hub = new Vue()\n\nwindow.i18n = i18n\n\nnew Vue({\n router,\n store,\n i18n,\n swal,\n}).$mount('#app')\n","import VueRouter from 'vue-router'\nimport Vuex from 'vuex'\nimport Ls from './services/ls'\nimport store from './store/index.js'\nimport Vue from 'vue'\nimport Vuelidate from 'vuelidate'\nimport money from 'v-money'\nimport VTooltip from 'v-tooltip'\nimport Transitions from 'vue2-transitions'\nimport SpaceWind from '@bytefury/spacewind'\n\n/**\n * Theme\n */\nimport theme from './components/theme'\n\n/**\n * Global css plugins\n */\n\nVue.use(SpaceWind, { theme })\n\nVue.use(Vuelidate)\n\nVue.use(Transitions)\n\nwindow._ = require('lodash')\n\n/**\n * Custom Directives\n */\nrequire('./helpers/directives')\n\n/**\n * Base Components\n */\nrequire('./components/base')\n\n/**\n * We'll register a HTTP interceptor to attach the \"CSRF\" header to each of\n * the outgoing requests issued by this application. The CSRF middleware\n * included with Laravel will automatically verify the header's value.\n */\n\nwindow.axios = require('axios')\nwindow.axios.defaults.withCredentials = true\nwindow.Ls = Ls\n\nwindow.axios.defaults.headers.common = {\n 'X-Requested-With': 'XMLHttpRequest',\n}\n\n/**\n * Interceptors\n */\n\nwindow.axios.interceptors.request.use(\n function (config) {\n if (store.getters['auth/isLoggedOut']) {\n let source = window.axios.CancelToken.source()\n config.cancelToken = source.token\n setTimeout(() => {\n store.dispatch('auth/setLogoutFalse')\n }, 200)\n\n return config\n }\n // Do something before request is sent\n const companyId = Ls.get('selectedCompany')\n\n if (companyId) {\n config.headers.common['company'] = companyId\n }\n\n return config\n },\n function (error) {\n // Do something with request error\n return Promise.reject(error)\n }\n)\n\n/**\n * Global Axios Response Interceptor\n */\nglobal.axios.interceptors.response.use(undefined, function (err) {\n // Do something with request error\n if (store.getters['auth/isLoggedOut']) {\n return true\n }\n if (!err.response) {\n window.toastr['error'](\n 'Please check your internet connection or wait until servers are back online',\n 'Network Error'\n )\n } else {\n if (\n err.response.data &&\n (err.response.statusText === 'Unauthorized' ||\n err.response.data === ' Unauthorized.')\n ) {\n // Unauthorized and log out\n window.toastr['error'](\n err.response.data.message ? err.response.data.message : 'Unauthorized'\n )\n store.dispatch('auth/logout', true)\n } else if (err.response.data.errors) {\n // Show a notification per error\n const errors = JSON.parse(JSON.stringify(err.response.data.errors))\n for (const i in errors) {\n window.toastr['error'](errors[i])\n }\n } else {\n // Unknown error\n window.toastr['error'](\n err.response.data.message\n ? err.response.data.message\n : err.response.data || 'Unknown error occurred',\n 'Error'\n )\n }\n }\n return Promise.reject(err)\n})\n\n/**\n * Global plugins\n */\nwindow.toastr = require('toastr')\n\nVue.use(VueRouter)\nVue.use(Vuex)\nVue.use(VTooltip)\n\n// register directive v-money and component \nVue.use(money, { precision: 2 })\n","import Vue from 'vue'\n\nimport BaseModal from './modal/BaseModal.vue'\nimport BaseLoader from './BaseLoader.vue'\nimport BaseCustomerSelect from './BaseCustomerSelect.vue'\n\nimport BaseCustomInput from './BaseCustomInput.vue'\n\nimport CustomerSelectPopup from './popup/CustomerSelectPopup.vue'\nimport TaxSelectPopup from './popup/TaxSelectPopup.vue'\nimport NoteSelectPopup from './popup/NoteSelectPopup.vue'\n\nimport BaseDatePicker from '../base/BaseDatePicker.vue'\nimport BaseTimePicker from './BaseTimePicker.vue'\nimport BasePage from './BasePage.vue'\n\nimport GlobalSearch from '../GlobalSearch.vue'\n\nimport DotIcon from '../../components/icon/DotIcon.vue'\nimport SaveIcon from '../../components/icon/SaveIcon.vue'\n\nimport SwSelect from '@bytefury/spacewind/src/components/sw-select'\n\nVue.component('base-modal', BaseModal)\nVue.component('global-search', GlobalSearch)\n\nVue.component('base-page', BasePage)\n\nVue.component('base-date-picker', BaseDatePicker)\n\nVue.component('base-loader', BaseLoader)\nVue.component('sw-select', SwSelect)\n\nVue.component('base-customer-select', BaseCustomerSelect)\nVue.component('base-custom-input', BaseCustomInput)\n\nVue.component('customer-select-popup', CustomerSelectPopup)\nVue.component('tax-select-popup', TaxSelectPopup)\nVue.component('note-select-popup', NoteSelectPopup)\n\nVue.component('base-time-picker', BaseTimePicker)\n\nVue.component('dot-icon', DotIcon)\nVue.component('save-icon', SaveIcon)\n","export default {\n classes:\n 'px-2 py-1 text-xs bg-success text-green-800 uppercase font-normal text-center',\n variants: {\n success:\n 'px-2 py-1 text-xs bg-success text-green-800 uppercase font-normal text-center',\n\n info:\n 'px-2 py-1 text-xs bg-info text-blue-800 uppercase text-center font-normal',\n\n danger:\n 'px-2 py-1 text-xs bg-danger text-red-700 uppercase font-normal text-center',\n\n warning:\n 'px-2 py-1 text-xs bg-warning text-indigo-900 uppercase font-normal text-center',\n },\n}\n","export default {\n variants: {\n grayLight: {\n button:\n 'inline-flex items-center justify-center text-gray-400 transition duration-150 ease-in-out border border-transparent focus:outline-none bg-gray-100 border border-gray-200 hover:bg-gray-200 hover:border-gray-400 hover:text-gray-600',\n },\n gray: {\n button:\n 'inline-flex items-center justify-center text-gray-400 transition duration-150 ease-in-out border border-transparent focus:outline-none bg-gray-300 border border-gray-200',\n },\n white: {\n button:\n 'inline-flex items-center justify-center text-black transition px-2 duration-150 ease-in-out border border-gray-300 border-solid focus:outline-none bg-white',\n },\n },\n sizes: {\n discount: {\n button: 'py-2 px-2 text-sm leading-5 rounded',\n loadingIcon: 'w-4 h-4 -ml-2',\n },\n },\n}\n","export default {\n classes: {\n container: 'bg-white rounded shadow',\n header: 'px-5 py-4 text-black border-b border-solid border-gray-300',\n body: 'px-4 py-5 sm:p-8',\n footer: 'px-5 py-4 border-t border-solid sm:px-6 border-gray-300',\n },\n\n variants: {\n customerCard: {\n body: 'px-4 py-5 sm:p-8',\n },\n settingCard: {\n header: 'px-4 pt-5 sm:px-8 sm:pt-8',\n footer: 'px-5 border-t-none py-4 sm:px-6',\n },\n },\n}\n","export default {\n classes: {\n container: 'relative sw-dropdown',\n activator: 'cursor-pointer',\n divider: 'border-t border-solid border-gray-200 my-2 mx-0 overflow-hidden',\n itemContainer:\n 'z-10 p-2 max-h-60 text-base text-left list-none rounded border-0 shadow bg-white text-black overflow-auto sw-scroll',\n item:\n 'flex p-2 text-sm font-light text-left text-black bg-transparent rounded cursor-pointer none hover:bg-gray-200 whitespace-nowrap',\n itemIcon: 'w-5 h-5 mr-3 text-secondary',\n },\n variants: {\n searchDropdown: {\n activator: 'cursor-pointer',\n container: 'relative',\n divider:\n 'border-t border-solid border-gray-200 my-2 mx-0 overflow-hidden',\n item:\n 'flex p-0 text-sm font-light text-left text-black bg-transparent rounded cursor-pointer none hover:bg-gray-200 whitespace-nowrap',\n itemContainer:\n 'z-10 p-2 text-base text-left list-none rounded border-0 shadow bg-white text-black',\n itemIcon: 'w-5 h-5 mr-3 text-secondary',\n },\n },\n}\n","export default {\n classes: {\n container: 'relative p-8 mt-5 rounded bg-gray-200',\n body: 'lg:flex block flex-col md:flex-row',\n },\n variants: {},\n}\n","export default {\n variants: {\n gray: {\n container:\n 'relative flex items-center w-full border border-solid rounded-md bg-gray-100 hover:border-gray-400',\n baseInput:\n 'not-italic font-normal leading-tight text-left outline-none rounded-md input-field box-border-2 placeholder-gray-400 text-black w-full h-8 px-0 py-0 text-xs bg-gray-100',\n rightIconInput:\n 'not-italic font-normal leading-tight text-left outline-none min-w-0 rounded-md input-field box-border-2 placeholder-gray-400 text-black w-full pl-3 pr-1 py-2 text-sm bg-gray-100',\n rightIconContainer:\n 'flex flex-col justify-center align-middle pr-2 text-gray-400 min-w-0',\n containerFocusIn: 'border-primary-500 ',\n containerFocusOut: 'border-gray-300 focus:border-transparent',\n },\n\n searchInput: {\n container:\n 'relative flex items-center w-full border border-solid rounded-md bg-white',\n baseInput:\n 'not-italic font-normal leading-tight text-left outline-none rounded-md input-field box-border-2 placeholder-gray-400 text-black w-full h-8 px-0 py-0 text-xs',\n rightIconInput:\n 'not-italic font-normal leading-tight text-left outline-none rounded-md input-field box-border-2 placeholder-gray-400 text-black w-full pl-3 pr-1 py-2 text-sm',\n leftIconInput:\n 'not-italic font-normal leading-tight text-left outline-none rounded-md input-field box-border-2 placeholder-gray-400 text-black w-full pl-1 pr-3 py-2 text-sm',\n rightIconContainer: 'flex flex-col justify-center align-middle pr-2',\n leftIconContainer: 'flex flex-col justify-center align-middle',\n containerFocusIn: 'border-primary-500',\n containerFocusOut: 'border-gray-300 focus:border-transparent',\n },\n },\n}\n","export default {\n classes: {\n container: 'pr-4 pl-0 list-none',\n itemContainer:\n 'cursor-pointer pb-2 pr-0 text-sm font-medium leading-5 text-gray-500 flex items-center',\n title: '',\n iconContainer: 'mr-3',\n listGroup: {\n container: 'p-0 list-none',\n titleContainer:\n 'flex items-center justify-between pb-2 pr-0 text-sm font-medium leading-5 text-gray-500 cursor-pointer',\n title: 'text-sm',\n icon: 'w-5 h-5 leading-4 transform rotate-90',\n itemsContainer: 'pl-4 list-none',\n itemContainer:\n 'cursor-pointer pb-2 pr-0 text-sm font-medium leading-5 text-gray-500 flex items-center',\n },\n active: {\n itemContainer:\n 'cursor-pointer pb-2 pr-0 text-sm font-medium flex items-center leading-5 text-primary-500',\n listGroup: {\n container: 'p-0 list-none',\n titleContainer:\n 'flex items-center justify-between pb-2 pr-0 text-sm font-medium leading-5 text-primary-500 cursor-pointer',\n title: 'text-sm',\n icon: 'w-5 h-5 leading-4 ',\n itemsContainer: 'pl-4 list-none',\n itemContainer:\n 'cursor-pointer pb-2 pr-0 text-sm font-medium leading-5 text-gray-500 flex items-center',\n },\n },\n },\n}\n","export default {\n classes: {\n overlayContainer:\n 'fixed z-50 inset-0 overflow-y-auto sw-scroll bg-opacity-25 bg-gray-700 flex justify-center min-h-screen items-center text-center sm:p-0',\n centering: 'hidden sm:inline-block sm:align-middle sm:h-screen',\n base:\n 'inline-block border-t-8 border-solid border-primary-500 w-full align-bottom bg-white rounded text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-xl sm:w-full m-6 sm:m-0',\n header:\n 'py-4 px-6 h-16 text-black font-medium text-lg border-b border-solid border-gray-light flex justify-between items-center',\n body: 'modal body text-sm',\n footer:\n 'border-t border-solid border-gray-light py-4 px-6 flex justify-end',\n },\n variants: {\n lg: {\n base:\n 'inline-block border-t-8 border-solid border-primary-500 w-full align-bottom bg-white rounded text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-4xl sm:w-full m-6 sm:m-0',\n },\n },\n}\n","export default {\n classes: {\n container: 'relative w-full',\n activator: 'relative w-full cursor-pointer',\n base: 'flex flex-col absolute w-full top-0 bg-white rounded z-20 shadow-xl',\n above: 'bottom-full top-unset',\n },\n}\n","export default {\n classes: {\n container: 'switch-container focus:outline-none',\n switch: 'switch',\n label:\n 'relative block h-4 bg-white border border-solid cursor-pointer border-gray switch-label',\n },\n}\n","export default {\n variants: {\n gray: {\n tdStyles:\n 'text-left text-base h-20 px-3 py-6 align-middle bg-gray-100 first:rounded-bl-md first:rounded-tl-md last:rounded-br-md last:rounded-tr-md',\n },\n },\n}\n","export default {\n variants: {\n invDesc:\n 'text-left border border-solid box-border rounded not-italic leading-snug placeholder-gray-400 bg-white border-gray-300 focus:border-primary-400 outline-none w-full py-2 px-3 font-normal text-xs text-black',\n },\n}\n","export default {\n classes: {\n wizardContainer: 'wizard w-full',\n wizardStepsContainer: 'relative flex items-center justify-center',\n navigationContainer:\n 'flex flex-col items-center justify-between h-32 step-indicator',\n progressesContainer:\n 'box-border relative flex justify-around mt-16 border-4 border-gray-200 border-solid rounded-md indicator-line',\n progressesSubContainer: 'absolute flex justify-between center',\n progress: 'rounded-full steps cursor-pointer',\n currentStep: 'bg-white border-primary-500',\n previousStep:\n 'bg-primary-500 border-primary-500 flex justify-center items-center',\n nextStep: 'border-gray-200 bg-white',\n icon:\n 'flex items-center justify-center w-full h-full text-sm font-black text-center text-white',\n stepContainer:\n 'w-full mb-8 bg-white border border-gray-200 border-solid rounded p-8 lg:w-9/12 md:w-full relative',\n stepHeadingContainer: 'heading-section',\n stepTitle: 'text-2xl not-italic font-semibold leading-7 text-black',\n stepDescription:\n 'w-full mt-2.5 mb-8 text-sm not-italic leading-snug text-gray-500 lg:w-7/12 md:w-7/12 sm:w-7/12',\n },\n variants: {},\n}\n","import SwModal from './SwModal'\nimport SwInput from './SwInput'\nimport SwTable from './SwTable'\nimport SwButton from './SwButton'\nimport SwDropdown from './SwDropdown'\nimport SwCard from './SwCard'\nimport SwList from './SwList'\nimport SwWizard from './SwWizard'\nimport SwTextarea from './SwTextarea'\nimport SwPopup from './SwPopup'\nimport SwBadge from './SwBadge'\nimport SwFilterWrapper from './SwFilterWrapper'\nimport SwSwitch from './SwSwitch'\n\nexport default {\n SwModal,\n SwInput,\n SwTable,\n SwButton,\n SwCard,\n SwList,\n SwWizard,\n SwTextarea,\n SwPopup,\n SwDropdown,\n SwBadge,\n SwFilterWrapper,\n SwSwitch,\n}\n","import Vue from 'vue'\n\nVue.directive('click-outside', {\n bind: function (el, binding, vnode) {\n el.event = function (event) {\n // here I check that click was outside the el and his childrens\n if (!(el === event.target || el.contains(event.target))) {\n // and if it did, call method provided in attribute value\n vnode.context[binding.expression](event)\n }\n }\n document.body.addEventListener('click', el.event)\n },\n unbind: function (el) {\n document.body.removeEventListener('click', el.event)\n },\n})\n\nVue.directive('autoresize', {\n inserted: function (el) {\n el.style.height = el.scrollHeight + 'px'\n if (el.style.overflow && el.style.overflow.y) {\n el.style.overflow.y = 'hidden'\n }\n el.style.resize = 'none'\n function OnInput() {\n this.style.height = 'auto'\n this.style.height = this.scrollHeight + 'px'\n this.scrollTop = this.scrollHeight\n window.scrollTo(window.scrollLeft, this.scrollTop + this.scrollHeight)\n }\n el.addEventListener('input', OnInput, false)\n },\n})\n","export default {\n addClass(el, className) {\n if (el.classList) el.classList.add(className)\n else el.className += ' ' + className\n },\n hasClass(el, className) {\n const hasClass = el.classList\n ? el.classList.contains(className)\n : new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className)\n\n return hasClass\n },\n\n formatMoney(amount, currency = 0) {\n if (!currency) {\n currency = {\n precision: 2,\n thousand_separator: ',',\n decimal_separator: '.',\n symbol: '$',\n }\n }\n\n amount = amount / 100\n\n let { precision, decimal_separator, thousand_separator, symbol } = currency\n\n try {\n precision = Math.abs(precision)\n precision = isNaN(precision) ? 2 : precision\n\n const negativeSign = amount < 0 ? '-' : ''\n\n let i = parseInt(\n (amount = Math.abs(Number(amount) || 0).toFixed(precision))\n ).toString()\n let j = i.length > 3 ? i.length % 3 : 0\n\n let moneySymbol = `${symbol}`\n\n return (\n moneySymbol +\n ' ' +\n negativeSign +\n (j ? i.substr(0, j) + thousand_separator : '') +\n i.substr(j).replace(/(\\d{3})(?=\\d)/g, '$1' + thousand_separator) +\n (precision\n ? decimal_separator +\n Math.abs(amount - i)\n .toFixed(precision)\n .slice(2)\n : '')\n )\n } catch (e) {\n console.log(e)\n }\n },\n\n formatGraphMoney(amount, currency = 0) {\n if (!currency) {\n currency = {\n precision: 2,\n thousand_separator: ',',\n decimal_separator: '.',\n symbol: '$',\n }\n }\n\n amount = amount / 100\n\n let { precision, decimal_separator, thousand_separator, symbol } = currency\n\n try {\n precision = Math.abs(precision)\n precision = isNaN(precision) ? 2 : precision\n\n const negativeSign = amount < 0 ? '-' : ''\n\n let i = parseInt(\n (amount = Math.abs(Number(amount) || 0).toFixed(precision))\n ).toString()\n let j = i.length > 3 ? i.length % 3 : 0\n\n let moneySymbol = `${symbol}`\n\n return (\n moneySymbol +\n ' ' +\n negativeSign +\n (j ? i.substr(0, j) + thousand_separator : '') +\n i.substr(j).replace(/(\\d{3})(?=\\d)/g, '$1' + thousand_separator) +\n (precision\n ? decimal_separator +\n Math.abs(amount - i)\n .toFixed(precision)\n .slice(2)\n : '')\n )\n } catch (e) {\n console.log(e)\n }\n },\n\n checkValidUrl(url) {\n if (\n url.includes('http://localhost') ||\n url.includes('http://127.0.0.1') ||\n url.includes('https://localhost') ||\n url.includes('https://127.0.0.1')\n ) {\n return true\n }\n let pattern = new RegExp(\n '^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$',\n 'i'\n ) // fragment locator\n\n return !!pattern.test(url)\n },\n\n checkValidDomainUrl(url) {\n if (url.includes('localhost')) {\n return true\n }\n let pattern = new RegExp(\n '^([0-9A-Za-z-\\\\.@:%_+~#=]+)+((\\\\.[a-zA-Z]{2,3})+)(/(.)*)?(\\\\?(.)*)?'\n )\n return !!pattern.test(url)\n },\n\n fallbackCopyTextToClipboard(text) {\n var textArea = document.createElement('textarea')\n textArea.value = text\n // Avoid scrolling to bottom\n textArea.style.top = '0'\n textArea.style.left = '0'\n textArea.style.position = 'fixed'\n document.body.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n var successful = document.execCommand('copy')\n var msg = successful ? 'successful' : 'unsuccessful'\n console.log('Fallback: Copying text command was ' + msg)\n } catch (err) {\n console.error('Fallback: Oops, unable to copy', err)\n }\n document.body.removeChild(textArea)\n },\n copyTextToClipboard(text) {\n if (!navigator.clipboard) {\n this.fallbackCopyTextToClipboard(text)\n return\n }\n navigator.clipboard.writeText(text).then(\n function () {\n return true\n },\n function (err) {\n return false\n }\n )\n },\n arrayDifference(array1, array2) {\n return array1.filter((i) => {\n return array2.indexOf(i) < 0\n })\n },\n getBadgeStatusColor(status) {\n switch (status) {\n case 'DRAFT':\n return {\n bgColor: '#F8EDCB',\n color: '#744210',\n }\n case 'PAID':\n return {\n bgColor: '#D5EED0',\n color: '#276749',\n }\n case 'UNPAID':\n return {\n bgColor: '#F8EDC',\n color: '#744210',\n }\n case 'SENT':\n return {\n bgColor: 'rgba(246, 208, 154, 0.4)',\n color: '#975a16',\n }\n case 'REJECTED':\n return {\n bgColor: '#E1E0EA',\n color: '#1A1841',\n }\n case 'ACCEPTED':\n return {\n bgColor: '#D5EED0',\n color: '#276749',\n }\n case 'VIEWED':\n return {\n bgColor: '#C9E3EC',\n color: '#2c5282',\n }\n case 'EXPIRED':\n return {\n bgColor: '#FED7D7',\n color: '#c53030',\n }\n case 'PARTIALLY PAID':\n return {\n bgColor: '#C9E3EC',\n color: '#2c5282',\n }\n case 'OVERDUE':\n return {\n bgColor: '#FED7D7',\n color: '#c53030',\n }\n case 'COMPLETED':\n return {\n bgColor: '#D5EED0',\n color: '#276749',\n }\n case 'DUE':\n return {\n bgColor: '#F8EDCB',\n color: '#744210',\n }\n case 'YES':\n return {\n bgColor: '#D5EED0',\n color: '#276749',\n }\n case 'NO':\n return {\n bgColor: '#FED7D7',\n color: '#c53030',\n }\n }\n },\n compareVersion(v1, v2, options) {\n const lexicographical = options && options.lexicographical\n const zeroExtend = options && options.zeroExtend\n let v1parts = v1.split('.')\n let v2parts = v2.split('.')\n function isValidPart(x) {\n return (lexicographical ? /^\\d+[A-Za-z]*$/ : /^\\d+$/).test(x)\n }\n if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {\n return NaN\n }\n if (zeroExtend) {\n while (v1parts.length < v2parts.length) v1parts.push('0')\n while (v2parts.length < v1parts.length) v2parts.push('0')\n }\n if (!lexicographical) {\n v1parts = v1parts.map(Number)\n v2parts = v2parts.map(Number)\n }\n for (let i = 0; i < v1parts.length; ++i) {\n if (v2parts.length == i) {\n return 1\n }\n if (v1parts[i] == v2parts[i]) {\n continue\n } else if (v1parts[i] > v2parts[i]) {\n return 1\n } else {\n return -1\n }\n }\n if (v1parts.length != v2parts.length) {\n return -1\n }\n return 0\n }\n}\n","import InputField from '../components/custom-fields/InputField.vue'\nimport SwitchField from '../components/custom-fields/SwitchField'\nimport TimeField from '../components/custom-fields/TimeField'\nimport DropdownField from '../components/custom-fields/DropdownField'\nimport DateTimeField from '../components/custom-fields/DateTimeField'\nimport DateField from '../components/custom-fields/DateField'\nimport TextAreaField from '../components/custom-fields/TextAreaField'\nimport UrlField from '../components/custom-fields/UrlField.vue'\nimport PhoneField from '../components/custom-fields/PhoneField.vue'\nimport NumberField from '../components/custom-fields/NumberField.vue'\n\nimport { mapActions } from 'vuex'\n\nexport default {\n components: {\n InputField,\n SwitchField,\n TimeField,\n DropdownField,\n DateTimeField,\n DateField,\n TextAreaField,\n UrlField,\n PhoneField,\n NumberField,\n },\n data() {\n return {\n formData: {\n customFields: [],\n },\n invalidFields: [],\n customFields: [],\n }\n },\n methods: {\n ...mapActions('customFields', ['fetchCustomFields']),\n async setInitialCustomFields(type = null) {\n let response = await this.fetchCustomFields({ type: type, limit: 'all' })\n this.customFields = response.data.customFields.data.map((_f) => {\n return { ..._f, cfid: _f.id }\n })\n this.setRemainingCustomFieldsValue()\n },\n setEditCustomFields(fields, customFields) {\n this.customFields = fields.map((field) => {\n field.label = field.custom_field.label\n field.cfid = field.custom_field.id\n field.options = field.custom_field.options\n field.placeholder = field.custom_field.placeholder\n field.is_required = field.custom_field.is_required\n field.order = field.custom_field.order\n return field\n })\n\n let currentCustomFieldIds = customFields.map((field) => field.id)\n let editCustomFieldIds = fields.map((field) => field.custom_field_id)\n let remainingCustomFieldIds = this.$utils.arrayDifference(\n currentCustomFieldIds,\n editCustomFieldIds\n )\n remainingCustomFieldIds.forEach((id) => {\n let data = customFields.find((field) => field.id == id)\n this.customFields.push({ ...data, cfid: data.id })\n })\n\n this.setRemainingCustomFieldsValue(true)\n },\n setCustomFieldValue(data) {\n let position = this.formData.customFields.findIndex(\n (field) => field.id == data.field.cfid\n )\n\n // check field has value so removed in invalidFields array\n let indexInInvalidField = this.invalidFields.findIndex(\n (field) => field.id == data.field.cfid\n )\n if (indexInInvalidField >= 0) {\n if (data.value) {\n this.invalidFields.splice(indexInInvalidField, 1)\n }\n }\n\n // set data in formData.customFields\n if (position >= 0) {\n this.formData.customFields[position].value = data.value\n return true\n }\n this.formData.customFields.push({\n id: data.field.cfid,\n value: data.value,\n })\n return true\n },\n setRemainingCustomFieldsValue() {\n let existingCustomFieldIds = this.formData.customFields.map((_f) => _f.id)\n let customFieldIds = this.customFields.map((_f) => _f.cfid)\n let remainingCustomFieldIds = this.$utils.arrayDifference(\n customFieldIds,\n existingCustomFieldIds\n )\n remainingCustomFieldIds.forEach((id) => {\n let field = this.customFields.find((field) => field.cfid == id)\n this.formData.customFields.push({\n id: field.cfid,\n isRequired: field.is_required,\n value: field.defaultAnswer,\n })\n })\n this.customFields = _.sortBy(this.customFields, (_cf) => _cf.order)\n },\n getInvalidFields() {\n return this.formData.customFields.filter(\n (field) =>\n field.isRequired &&\n (field.value == null || field.value == undefined || field.value == '')\n )\n },\n touchCustomField() {\n return new Promise((resolve, reject) => {\n try {\n if (this.getInvalidFields() <= 0) {\n resolve({ error: false })\n }\n this.invalidFields = this.getInvalidFields()\n resolve({ error: true })\n } catch (error) {\n reject(error)\n }\n })\n },\n },\n}\n","import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\nimport en from './en.json'\nimport fr from './fr.json'\nimport es from './es.json'\nimport ar from './ar.json'\nimport de from './de.json'\nimport pt_BR from './pt-br.json'\nimport it from './it.json'\nimport sr from './sr.json'\nimport nl from './nl.json'\nimport lv from './lv.json'\nimport sv from './sv.json'\n\nVue.use(VueI18n)\n\nconst i18n = new VueI18n({\n locale: 'en',\n messages: {\n en,\n fr,\n es,\n ar,\n de,\n pt_BR,\n it,\n sr,\n nl,\n lv,\n sv,\n },\n})\n\nexport default i18n\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n/*\n |--------------------------------------------------------------------------\n | Views\n |--------------------------------------------------------------------------|\n */\n\n// Layouts\nimport LayoutBasic from './views/layouts/LayoutBasic.vue'\nimport LayoutLogin from './views/layouts/LayoutLogin.vue'\nimport LayoutWizard from './views/layouts/LayoutWizard.vue'\n\n// Auth\nimport Login from './views/auth/Login.vue'\nimport ForgotPassword from './views/auth/ForgotPassword.vue'\nimport ResetPassword from './views/auth/ResetPassword.vue'\nimport Register from './views/auth/Register.vue'\n\nimport NotFoundPage from './views/errors/404.vue'\n\n// Dashbord\nimport Dashboard from './views/dashboard/Dashboard.vue'\n\n// Customers\nimport CustomerIndex from './views/customers/Index.vue'\nimport CustomerCreate from './views/customers/Create.vue'\nimport CustomerView from './views/customers/View.vue'\n\n// Items\nimport ItemsIndex from './views/items/Index.vue'\nimport ItemCreate from './views/items/Create.vue'\n\n// Invoices\nimport InvoiceIndex from './views/invoices/Index.vue'\nimport InvoiceCreate from './views/invoices/Create.vue'\nimport InvoiceView from './views/invoices/View.vue'\n\n// Payments\nimport PaymentsIndex from './views/payments/Index.vue'\nimport PaymentCreate from './views/payments/Create.vue'\nimport PaymentView from './views/payments/View.vue'\n\n// Estimates\nimport EstimateIndex from './views/estimates/Index.vue'\nimport EstimateCreate from './views/estimates/Create.vue'\nimport EstimateView from './views/estimates/View.vue'\n\n// Expenses\nimport ExpensesIndex from './views/expenses/Index'\nimport ExpenseCreate from './views/expenses/Create.vue'\n\n//User\nimport UserIndex from './views/users/Index.vue'\nimport UserCreate from './views/users/Create.vue'\n\n// Report\nimport SalesReports from './views/reports/SalesReports'\nimport ExpensesReport from './views/reports/ExpensesReport'\nimport ProfitLossReport from './views/reports/ProfitLossReport'\nimport TaxReport from './views/reports/TaxReport.vue'\nimport ReportLayout from './views/reports/layout/Index.vue'\n\n// Settings\nimport SettingsLayout from './views/settings/SettingsIndex.vue'\nimport CompanyInfo from './views/settings/CompanyInfoSetting.vue'\nimport Customization from './views/settings/CustomizationSetting.vue'\nimport Notifications from './views/settings/NotificationsSetting.vue'\nimport Preferences from './views/settings/PreferencesSetting.vue'\nimport UserProfile from './views/settings/UserProfileSetting.vue'\nimport TaxTypes from './views/settings/TaxTypesSetting.vue'\nimport NotesSetting from './views/settings/NotesSetting.vue'\nimport ExpenseCategory from './views/settings/ExpenseCategorySetting.vue'\nimport MailConfig from './views/settings/MailConfigSetting.vue'\nimport UpdateApp from './views/settings/UpdateAppSetting.vue'\nimport Backup from './views/settings/BackupSetting.vue'\nimport FileDisk from './views/settings/FileDiskSetting.vue'\nimport CustomFieldsIndex from './views/settings/CustomFieldsSetting.vue'\nimport PaymentMode from './views/settings/PaymentsModeSetting.vue'\nimport Wizard from './views/wizard/Wizard.vue'\n\nVue.use(VueRouter)\n\nconst routes = [\n /*\n |--------------------------------------------------------------------------\n | Auth & Registration\n |--------------------------------------------------------------------------|\n */\n\n {\n path: '/',\n component: LayoutLogin,\n meta: { redirectIfAuthenticated: true },\n children: [\n {\n path: '/',\n component: Login,\n },\n {\n path: 'login',\n component: Login,\n name: 'login',\n },\n {\n path: '/forgot-password',\n component: ForgotPassword,\n name: 'forgot-password',\n },\n {\n path: '/reset-password/:token',\n component: ResetPassword,\n name: 'reset-password',\n },\n {\n path: 'register',\n component: Register,\n name: 'register',\n },\n ],\n },\n\n /*\n |--------------------------------------------------------------------------\n | Onboarding\n |--------------------------------------------------------------------------|\n */\n {\n path: '/on-boarding',\n component: LayoutWizard,\n children: [\n {\n path: '/',\n component: Wizard,\n name: 'wizard',\n },\n ],\n },\n\n /*\n |--------------------------------------------------------------------------\n | Admin\n |--------------------------------------------------------------------------|\n */\n {\n path: '/admin',\n component: LayoutBasic,\n meta: { requiresAuth: true },\n children: [\n // Dashboard\n {\n path: '/',\n component: Dashboard,\n name: 'dashboard',\n },\n {\n path: 'dashboard',\n component: Dashboard,\n },\n\n // Customers\n {\n path: 'customers',\n component: CustomerIndex,\n },\n {\n path: 'customers/create',\n name: 'customers.create',\n component: CustomerCreate,\n },\n {\n path: 'customers/:id/edit',\n name: 'customers.edit',\n component: CustomerCreate,\n },\n {\n path: 'customers/:id/view',\n name: 'customers.view',\n component: CustomerView,\n },\n\n // Items\n {\n path: 'items',\n component: ItemsIndex,\n },\n {\n path: 'items/create',\n name: 'items.create',\n component: ItemCreate,\n },\n {\n path: 'items/:id/edit',\n name: 'items.edit',\n component: ItemCreate,\n },\n\n // Estimates\n {\n path: 'estimates',\n name: 'estimates.index',\n component: EstimateIndex,\n },\n {\n path: 'estimates/create',\n name: 'estimates.create',\n component: EstimateCreate,\n },\n {\n path: 'estimates/:id/view',\n name: 'estimates.view',\n component: EstimateView,\n },\n {\n path: 'estimates/:id/edit',\n name: 'estimates.edit',\n component: EstimateCreate,\n },\n\n // Invoices\n {\n path: 'invoices',\n name: 'invoices.index',\n component: InvoiceIndex,\n },\n {\n path: 'invoices/create',\n name: 'invoices.create',\n component: InvoiceCreate,\n },\n {\n path: 'invoices/:id/view',\n name: 'invoices.view',\n component: InvoiceView,\n },\n {\n path: 'invoices/:id/edit',\n name: 'invoices.edit',\n component: InvoiceCreate,\n },\n\n // Payments\n {\n path: 'payments',\n name: 'payments.index',\n component: PaymentsIndex,\n },\n {\n path: 'payments/create',\n name: 'payments.create',\n component: PaymentCreate,\n },\n {\n path: 'payments/:id/create',\n name: 'invoice.payments.create',\n component: PaymentCreate,\n },\n {\n path: 'payments/:id/edit',\n name: 'payments.edit',\n component: PaymentCreate,\n },\n {\n path: 'payments/:id/view',\n name: 'payments.view',\n component: PaymentView,\n },\n\n // Expenses\n {\n path: 'expenses',\n component: ExpensesIndex,\n },\n {\n path: 'expenses/create',\n name: 'expenses.create',\n component: ExpenseCreate,\n },\n {\n path: 'expenses/:id/edit',\n name: 'expenses.edit',\n component: ExpenseCreate,\n },\n\n // User\n {\n path: 'users',\n component: UserIndex,\n },\n {\n path: 'users/create',\n name: 'users.create',\n component: UserCreate,\n },\n {\n path: 'users/:id/edit',\n name: 'users.edit',\n component: UserCreate,\n },\n\n // Reports\n {\n path: 'reports',\n component: ReportLayout,\n children: [\n {\n path: 'sales',\n component: SalesReports,\n },\n {\n path: 'expenses',\n component: ExpensesReport,\n },\n {\n path: 'profit-loss',\n component: ProfitLossReport,\n },\n {\n path: 'taxes',\n component: TaxReport,\n },\n ],\n },\n\n // Settings\n {\n path: 'settings',\n component: SettingsLayout,\n children: [\n {\n path: 'company-info',\n name: 'company.info',\n component: CompanyInfo,\n },\n {\n path: 'customization',\n name: 'customization',\n component: Customization,\n },\n {\n path: 'payment-mode',\n name: 'payment.mode',\n component: PaymentMode,\n },\n\n {\n path: 'custom-fields',\n name: 'custom.fields',\n component: CustomFieldsIndex,\n },\n {\n path: 'user-profile',\n name: 'user.profile',\n component: UserProfile,\n },\n {\n path: 'preferences',\n name: 'preferences',\n component: Preferences,\n },\n {\n path: 'tax-types',\n name: 'tax.types',\n component: TaxTypes,\n },\n {\n path: 'notes',\n name: 'notes',\n component: NotesSetting,\n },\n {\n path: 'expense-category',\n name: 'expense.category',\n component: ExpenseCategory,\n },\n {\n path: 'mail-configuration',\n name: 'mailconfig',\n component: MailConfig,\n },\n {\n path: 'notifications',\n name: 'notifications',\n component: Notifications,\n },\n {\n path: 'update-app',\n name: 'updateapp',\n component: UpdateApp,\n },\n {\n path: 'backup',\n name: 'backup',\n component: Backup,\n },\n {\n path: 'file-disk',\n name: 'file-disk',\n component: FileDisk,\n },\n ],\n },\n ],\n },\n\n // DEFAULT ROUTE\n { path: '*', component: NotFoundPage },\n]\n\nconst router = new VueRouter({\n routes,\n mode: 'history',\n linkActiveClass: 'active',\n})\n\nexport default router\n","export default {\n get(key) {\n return localStorage.getItem(key) ? localStorage.getItem(key) : null\n },\n\n set(key, val) {\n localStorage.setItem(key, val)\n },\n\n remove(key) {\n localStorage.removeItem(key)\n },\n}\n","import * as types from './mutation-types'\nimport * as userTypes from './modules/user/mutation-types'\nimport * as companyTypes from './modules/company/mutation-types'\n\nexport default {\n bootstrap({ commit, dispatch, state }) {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/bootstrap')\n .then((response) => {\n commit('user/' + userTypes.BOOTSTRAP_CURRENT_USER, response.data.user)\n\n commit(\n 'company/' + companyTypes.SET_SELECTED_COMPANY,\n response.data.company\n )\n\n commit('company/' + companyTypes.SET_DEFAULT_CURRENCY, response.data)\n\n commit(\n 'user/' + userTypes.SET_DEFAULT_LANGUAGE,\n response.data.default_language\n )\n\n commit(\n 'company/' + companyTypes.SET_MOMENT_DATE_FORMAT,\n response.data.moment_date_format\n )\n\n commit(\n 'company/' + companyTypes.SET_CARBON_DATE_FORMAT,\n response.data.carbon_date_format\n )\n\n commit(\n 'company/' + companyTypes.SET_DEFAULT_FISCAL_YEAR,\n response.data.fiscal_year\n )\n\n commit(\n 'company/' + companyTypes.SET_DEFAULT_TIME_ZONE,\n response.data.time_zone\n )\n\n commit(types.SET_CURRENCIES, response.data.currencies)\n\n commit(types.SET_COUNTRIES, response.data.countries)\n\n commit(types.UPDATE_APP_LOADING_STATUS, true)\n\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n },\n\n fetchLanguages({ commit, dispatch, state }) {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/languages')\n .then((response) => {\n commit(types.SET_LANGUAGES, response.data.languages)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n },\n\n fetchCurrencies({ commit, dispatch, state }) {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/currencies')\n .then((response) => {\n commit(types.SET_CURRENCIES, response.data.currencies)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n },\n\n fetchDateFormats({ commit, dispatch, state }) {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/date/formats')\n .then((response) => {\n commit(types.SET_DATE_FORMATS, response.data.date_formats)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n },\n\n fetchFiscalYears({ commit, dispatch, state }) {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/fiscal/years')\n .then((response) => {\n commit(types.SET_FISCAL_YEARS, response.data.fiscal_years)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n },\n\n fetchTimeZones({ commit, dispatch, state }) {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/timezones')\n .then((response) => {\n commit(types.SET_TIMEZONES, response.data.time_zones)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n },\n\n fetchCountries({ commit, dispatch, state }) {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/countries')\n .then((response) => {\n commit(types.SET_COUNTRIES, response.data.countries)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n },\n\n toggleSidebar({ commit }) {\n commit(types.TOGGLE_SIDEBAR)\n },\n}\n","export const isAppLoaded = (state) => state.isAppLoaded\n\nexport const languages = (state) => state.languages\n\nexport const currencies = (state) => state.currencies\n\nexport const timeZones = (state) => state.timeZones\n\nexport const dateFormats = (state) => state.dateFormats\n\nexport const fiscalYears = (state) => state.fiscalYears\n\nexport const countries = (state) => state.countries\n\nexport const isSidebarOpen = (state) => state.isSidebarOpen\n","import Vue from 'vue'\nimport Vuex from 'vuex'\n\nimport * as getters from './getters'\nimport mutations from './mutations'\nimport actions from './actions'\n\nimport auth from './modules/auth'\nimport user from './modules/user'\nimport category from './modules/category'\nimport customer from './modules/customer'\nimport company from './modules/company'\nimport dashboard from './modules/dashboard'\nimport estimate from './modules/estimate'\nimport expense from './modules/expense'\nimport invoice from './modules/invoice'\nimport payment from './modules/payment'\nimport item from './modules/item'\nimport modal from './modules/modal'\nimport customFields from './modules/custom-field'\nimport taxType from './modules/tax-type'\nimport users from './modules/users'\nimport backup from './modules/backup'\nimport disks from './modules/disk'\nimport estimateTemplate from './modules/estimate-template'\nimport invoiceTemplate from './modules/invoice-template'\nimport search from './modules/search'\nimport notes from './modules/notes'\n\nVue.use(Vuex)\n\nconst initialState = {\n languages: [],\n\n timeZones: [],\n\n dateFormats: [],\n\n fiscalYears: [],\n\n currencies: [],\n\n countries: [],\n\n isAppLoaded: false,\n\n isSidebarOpen: false,\n}\n\nexport default new Vuex.Store({\n strict: true,\n state: initialState,\n getters,\n mutations,\n actions,\n\n modules: {\n auth,\n user,\n category,\n company,\n customer,\n dashboard,\n estimate,\n item,\n invoice,\n expense,\n modal,\n customFields,\n payment,\n taxType,\n users,\n backup,\n disks,\n estimateTemplate,\n invoiceTemplate,\n search,\n notes,\n },\n})\n","import * as types from './mutation-types'\nimport * as userTypes from '../user/mutation-types'\nimport * as rootTypes from '../../mutation-types'\nimport router from '@/router.js'\n\nexport const login = ({ commit }, data) => {\n return new Promise((resolve, reject) => {\n window.axios.get('/sanctum/csrf-cookie').then((response) => {\n window.axios\n .post('/login', data)\n .then((response) => {\n commit(types.SET_LOGOUT, false)\n commit('user/' + userTypes.RESET_CURRENT_USER, null, { root: true })\n commit(rootTypes.UPDATE_APP_LOADING_STATUS, false, { root: true })\n\n window.toastr['success']('Login Successful')\n resolve(response)\n })\n .catch((err) => {\n commit(types.AUTH_ERROR, err.response)\n reject(err)\n })\n })\n })\n}\n\nexport const setLogoutFalse = ({ state, commit }) => {\n commit(types.SET_LOGOUT, false)\n}\n\nexport const logout = ({ state, commit }) => {\n return new Promise((resolve, reject) => {\n if (state.isLoggedOut) {\n resolve()\n return true\n }\n commit(types.SET_LOGOUT, true)\n\n window.axios\n .get('/auth/logout')\n .then(() => {\n router.push('/login')\n window.toastr['success']('Logged out!', 'Success')\n })\n .catch((err) => {\n router.push('/login')\n reject(err)\n })\n })\n}\n","export const isLoggedOut = (state) => state.isLoggedOut\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n status: '',\n isLoggedOut: false,\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const AUTH_SUCCESS = 'AUTH_SUCCESS'\nexport const AUTH_LOGOUT = 'AUTH_LOGOUT'\nexport const AUTH_ERROR = 'AUTH_ERROR'\nexport const REFRESH_SUCCESS = 'REFRESH_SUCCESS'\nexport const SET_LOGOUT = 'SET_LOGOUT'\n","import * as types from './mutation-types'\n\nexport default {\n [types.AUTH_SUCCESS](state, token) {\n state.token = token\n state.status = 'success'\n },\n\n [types.SET_LOGOUT](state, data) {\n state.isLoggedOut = data\n },\n\n [types.AUTH_ERROR](state, errorResponse) {\n state.token = null\n state.status = 'error'\n },\n\n [types.REFRESH_SUCCESS](state, token) {\n state.token = token\n state.status = 'success'\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchBackups = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/backups`, { params })\n .then((response) => {\n commit(types.SET_BACKUPS, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const createBackup = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/backups`, data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const removeBackup = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .delete(`/api/v1/backups/${params.disk}`, { params })\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const getBackups = (state) => state.backups\nexport const getBackupDisks = (state) => state.backupDisks\nexport const getBackupDisksInfo = (state) => state.backupDisksInfo\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n backups: [],\n backupDisks: [],\n backupDisksInfo: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_BACKUPS = 'SET_BACKUPS'\nexport const ADD_BACKUPS = 'ADD_BACKUPS'\nexport const DELETE_BACKUPS = 'DELETE_BACKUPS'\nexport const SET_BACKUP_DISKS = 'SET_BACKUP_DISKS'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_BACKUPS](state, data) {\n state.backups = data.backups\n state.backupDisks = data.disks\n },\n\n [types.SET_BACKUP_DISKS](state, data) {\n state.backupDisksInfo = data.disks\n },\n\n [types.ADD_BACKUPS](state, data) {\n state.backups.push(data.backup)\n },\n\n [types.DELETE_BACKUPS](state, id) {\n let index = state.backups.findIndex((backup) => backup.id === id)\n state.backups.splice(index, 1)\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchCategories = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/categories`, { params })\n .then((response) => {\n commit(types.SET_CATEGORIES, response.data.categories.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchCategory = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/categories/${id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addCategory = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/categories', data)\n .then((response) => {\n commit(types.ADD_CATEGORY, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateCategory = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/categories/${data.id}`, data)\n .then((response) => {\n commit(types.UPDATE_CATEGORY, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteCategory = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .delete(`/api/v1/categories/${id}`)\n .then((response) => {\n if (response.data.success) {\n commit(types.DELETE_CATEGORY, id)\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const categories = (state) => state.categories\n\nexport const getCategoryById = (state) => (id) => {\n return state.categories.find(category => category.id === id)\n}","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n categories: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_CATEGORIES = 'SET_CATEGORIES'\nexport const ADD_CATEGORY = 'ADD_CATEGORY'\nexport const UPDATE_CATEGORY = 'UPDATE_CATEGORY'\nexport const DELETE_CATEGORY = 'DELETE_CATEGORY'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_CATEGORIES](state, categories) {\n state.categories = categories\n },\n\n [types.ADD_CATEGORY](state, data) {\n state.categories.push(data.category)\n },\n\n [types.UPDATE_CATEGORY](state, data) {\n let pos = state.categories.findIndex(\n (category) => category.id === data.category.id\n )\n Object.assign(state.categories[pos], { ...data.category })\n },\n\n [types.DELETE_CATEGORY](state, id) {\n let pos = state.categories.findIndex((category) => category.id === id)\n state.categories.splice(pos, 1)\n },\n}\n","import * as types from './mutation-types'\n\nexport const setSelectedCompany = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECTED_COMPANY, data)\n}\n\nexport const updateCompany = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put('/api/v1/company', data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateCompanyLogo = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/company/upload-logo', data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchCompanySettings = ({ commit, dispatch, state }, settings) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/company/settings', {\n params: {\n settings,\n },\n })\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateCompanySettings = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/company/settings', data)\n .then((response) => {\n commit(types.SET_CARBON_DATE_FORMAT, data.settings.carbon_date_format)\n commit(types.SET_MOMENT_DATE_FORMAT, data.settings.moment_date_format)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const setItemDiscount = ({ commit, dispatch, state }) => {\n commit(types.SET_ITEM_DISCOUNT)\n}\n\nexport const fetchMailDrivers = ({ commit, dispatch, state }) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/mail/drivers')\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchMailConfig = ({ commit, dispatch, state }) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/mail/config')\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateMailConfig = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/mail/config', data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const sendTestMail = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/mail/test', data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const setDefaultCurrency = ({ commit, dispatch, state }, data) => {\n commit(types.SET_DEFAULT_CURRENCY, { default_currency: data })\n}\n","export const getSelectedCompany = (state) => state.selectedCompany\n\nexport const getMomentDateFormat = (state) => state.momentDateFormat\n\nexport const getCarbonDateFormat = (state) => state.carbonDateFormat\n\nexport const itemDiscount = (state) => state.item_discount\n\nexport const defaultFiscalYear = (state) => state.defaultFiscalYear\n\nexport const defaultTimeZone = (state) => state.defaultTimeZone\n\nexport const defaultCurrency = (state) => state.defaultCurrency\n\nexport const defaultCurrencyForInput = (state) => {\n if (state.defaultCurrency) {\n return {\n decimal: state.defaultCurrency.decimal_separator,\n thousands: state.defaultCurrency.thousand_separator,\n prefix: state.defaultCurrency.symbol + ' ',\n precision: state.defaultCurrency.precision,\n masked: false,\n }\n }\n\n return {\n decimal: '.',\n thousands: ',',\n prefix: '$ ',\n precision: 2,\n masked: false,\n }\n}\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n companies: [],\n\n selectedCompany: null,\n\n company: null,\n\n momentDateFormat: null,\n\n carbonDateFormat: null,\n\n item_discount: false,\n\n defaultFiscalYear: null,\n\n defaultTimeZone: null,\n\n defaultCurrency: null,\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const BOOTSTRAP_COMPANIES = 'BOOTSTRAP_COMPANIES'\n\nexport const SET_SELECTED_COMPANY = 'SET_SELECTED_COMPANY'\n\nexport const SET_MOMENT_DATE_FORMAT = 'SET_MOMENT_DATE_FORMAT'\n\nexport const SET_CARBON_DATE_FORMAT = 'SET_CARBON_DATE_FORMAT'\n\nexport const SET_DEFAULT_FISCAL_YEAR = 'SET_DEFAULT_FISCAL_YEAR'\n\nexport const SET_DEFAULT_TIME_ZONE = 'SET_DEFAULT_TIME_ZONE'\n\nexport const SET_ITEM_DISCOUNT = 'SET_ITEM_DISCOUNT'\n\nexport const SET_DEFAULT_CURRENCY = 'SET_DEFAULT_CURRENCY'\n","import * as types from './mutation-types'\nimport Ls from '@/services/ls'\n\nexport default {\n [types.SET_SELECTED_COMPANY](state, company) {\n Ls.set('selectedCompany', company.id)\n state.selectedCompany = company\n },\n\n [types.SET_MOMENT_DATE_FORMAT](state, data) {\n state.momentDateFormat = data\n },\n\n [types.SET_CARBON_DATE_FORMAT](state, data) {\n state.carbonDateFormat = data\n },\n\n [types.SET_ITEM_DISCOUNT](state) {\n state.item_discount = true\n },\n\n [types.SET_DEFAULT_FISCAL_YEAR](state, data) {\n state.defaultFiscalYear = data\n },\n\n [types.SET_DEFAULT_TIME_ZONE](state, data) {\n state.defaultTimeZone = data\n },\n\n [types.SET_DEFAULT_CURRENCY](state, data) {\n state.defaultCurrency = data.default_currency\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchCustomFields = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/custom-fields`, { params })\n .then((response) => {\n commit(types.SET_CUSTOM_FIELDS, response.data.customFields.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchNoteCustomFields = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n if (state.isRequestOngoing) {\n resolve({ requestOnGoing: true })\n return true\n }\n commit(types.SET_REQUEST_STATE, true)\n window.axios\n .get(`/api/v1/custom-fields`, { params })\n .then((response) => {\n commit(types.SET_CUSTOM_FIELDS, response.data.customFields.data)\n commit(types.SET_REQUEST_STATE, false)\n resolve(response)\n })\n .catch((err) => {\n commit(types.SET_REQUEST_STATE, false)\n reject(err)\n })\n })\n}\n\nexport const fetchCustomField = ({ commit, dispatch }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/custom-fields/${id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addCustomField = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/custom-fields`, params)\n .then((response) => {\n commit(types.ADD_CUSTOM_FIELDS, response.data.customField)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateCustomField = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/custom-fields/${params.id}`, params)\n .then((response) => {\n commit(types.UPDATE_CUSTOM_FIELDS, params)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteCustomFields = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .delete(`/api/v1/custom-fields/${id}`)\n .then((response) => {\n commit(types.DELETE_CUSTOM_FIELDS, id)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const getCustomFields = (state) => state.customFields\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n customFields: [],\n isRequestOngoing: false,\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_CUSTOM_FIELDS = 'SET_CUSTOM_FIELDS'\nexport const ADD_CUSTOM_FIELDS = 'ADD_CUSTOM_FIELDS'\nexport const UPDATE_CUSTOM_FIELDS = 'UPDATE_CUSTOM_FIELDS'\nexport const DELETE_CUSTOM_FIELDS = 'DELETE_CUSTOM_FIELDS'\nexport const SET_REQUEST_STATE = 'SET_REQUEST_STATE'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_CUSTOM_FIELDS](state, fields) {\n state.customFields = fields\n },\n\n [types.ADD_CUSTOM_FIELDS](state, field) {\n field = {\n ...field,\n options: field.options.map((option) => {\n return { name: option ? option : '' }\n }),\n }\n\n state.customFields = [...state.customFields, field]\n },\n\n [types.UPDATE_CUSTOM_FIELDS](state, field) {\n field = {\n ...field,\n options: field.options.map((option) => {\n return { name: option ? option : '' }\n }),\n }\n\n let pos = state.customFields.findIndex((_f) => _f.id === field.id)\n\n if (state.customFields[pos]) {\n state.customFields[pos] = field\n }\n },\n\n [types.DELETE_CUSTOM_FIELDS](state, id) {\n let index = state.customFields.findIndex((field) => field.id === id)\n state.customFields.splice(index, 1)\n },\n\n [types.SET_REQUEST_STATE](state, flag) {\n state.isRequestOngoing = flag\n },\n}\n","import * as types from './mutation-types'\nimport * as searchTypes from '../search/mutation-types'\n\nexport const fetchCustomers = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/customers`, { params })\n .then((response) => {\n commit(types.BOOTSTRAP_CUSTOMERS, response.data.customers.data)\n commit(types.SET_TOTAL_CUSTOMERS, response.data.customerTotalCount)\n commit(\n 'search/' + searchTypes.SET_CUSTOMER_LISTS,\n response.data.customers.data,\n { root: true }\n )\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchCustomer = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/customers/${params.id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchViewCustomer = ({ commit, dispatch }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/customers/${params.id}/stats`, { params })\n .then((response) => {\n commit(types.SET_SELECTED_VIEW_CUSTOMER, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addCustomer = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/customers', data)\n .then((response) => {\n commit(types.ADD_CUSTOMER, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateCustomer = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/customers/${data.id}`, data)\n .then((response) => {\n if (response.data.success) {\n commit(types.UPDATE_CUSTOMER, response.data)\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteCustomer = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/customers/delete`, id)\n .then((response) => {\n commit(types.DELETE_CUSTOMER, id)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteMultipleCustomers = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/customers/delete`, { ids: state.selectedCustomers })\n .then((response) => {\n commit(types.DELETE_MULTIPLE_CUSTOMERS, state.selectedCustomers)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const setSelectAllState = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECT_ALL_STATE, data)\n}\n\nexport const selectAllCustomers = ({ commit, dispatch, state }) => {\n if (state.selectedCustomers.length === state.customers.length) {\n commit(types.SET_SELECTED_CUSTOMERS, [])\n commit(types.SET_SELECT_ALL_STATE, false)\n } else {\n let allCustomerIds = state.customers.map((cust) => cust.id)\n commit(types.SET_SELECTED_CUSTOMERS, allCustomerIds)\n commit(types.SET_SELECT_ALL_STATE, true)\n }\n}\n\nexport const selectCustomer = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECTED_CUSTOMERS, data)\n if (state.selectedCustomers.length === state.customers.length) {\n commit(types.SET_SELECT_ALL_STATE, true)\n } else {\n commit(types.SET_SELECT_ALL_STATE, false)\n }\n}\n\nexport const resetSelectedCustomer = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_SELECTED_CUSTOMER)\n}\n","export const customers = (state) => state.customers\nexport const selectAllField = (state) => state.selectAllField\nexport const selectedCustomers = (state) => state.selectedCustomers\nexport const totalCustomers = (state) => state.totalCustomers\nexport const getCustomer = (state) => (id) => {\n let CstId = parseInt(id)\n return state.customers.find((customer) => customer.id === CstId)\n}\nexport const selectedViewCustomer = (state) => state.selectedViewCustomer\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n customers: [],\n totalCustomers: 0,\n selectAllField: false,\n selectedCustomers: [],\n selectedViewCustomer: {},\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const BOOTSTRAP_CUSTOMERS = 'BOOTSTRAP_CUSTOMERS'\nexport const ADD_CUSTOMER = 'ADD_CUSTOMER'\nexport const UPDATE_CUSTOMER = 'UPDATE_CUSTOMER'\nexport const DELETE_CUSTOMER = 'DELETE_CUSTOMER'\nexport const DELETE_MULTIPLE_CUSTOMERS = 'DELETE_MULTIPLE_CUSTOMERS'\nexport const SET_SELECTED_CUSTOMERS = 'SET_SELECTED_CUSTOMERS'\nexport const SET_TOTAL_CUSTOMERS = 'SET_TOTAL_CUSTOMERS'\nexport const RESET_SELECTED_CUSTOMER = 'RESET_SELECTED_CUSTOMER'\nexport const SET_SELECT_ALL_STATE = 'SET_SELECT_ALL_STATE'\nexport const SET_SELECTED_VIEW_CUSTOMER = 'SET_SELECTED_VIEW_CUSTOMER'\n","import * as types from './mutation-types'\n\nexport default {\n [types.BOOTSTRAP_CUSTOMERS](state, customers) {\n state.customers = customers\n },\n\n [types.SET_TOTAL_CUSTOMERS](state, totalCustomers) {\n state.totalCustomers = totalCustomers\n },\n\n [types.ADD_CUSTOMER](state, data) {\n state.customers.push(data.customer)\n },\n\n [types.UPDATE_CUSTOMER](state, data) {\n let pos = state.customers.findIndex(\n (customer) => customer.id === data.customer.id\n )\n\n state.customers[pos] = data.customer\n },\n\n [types.DELETE_CUSTOMER](state, id) {\n let index = state.customers.findIndex((customer) => customer.id === id)\n state.customers.splice(index, 1)\n },\n\n [types.DELETE_MULTIPLE_CUSTOMERS](state, selectedCustomers) {\n selectedCustomers.forEach((customer) => {\n let index = state.customers.findIndex((_cust) => _cust.id === customer.id)\n state.customers.splice(index, 1)\n })\n\n state.selectedCustomers = []\n },\n\n [types.SET_SELECTED_CUSTOMERS](state, data) {\n state.selectedCustomers = data\n },\n\n [types.RESET_SELECTED_CUSTOMER](state, data) {\n state.selectedCustomer = null\n },\n\n [types.SET_SELECT_ALL_STATE](state, data) {\n state.selectAllField = data\n },\n\n [types.SET_SELECTED_VIEW_CUSTOMER](state, selectedViewCustomer) {\n state.selectedViewCustomer = selectedViewCustomer\n },\n}\n","import * as types from './mutation-types'\n\nexport const loadData = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/dashboard`, { params })\n .then((response) => {\n commit(types.SET_INITIAL_DATA, response.data)\n commit(types.SET_DASHBOARD_DATA_LOADED_STATE, true)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\n// export const getChart = ({ commit, dispatch, state }) => {\n// return new Promise((resolve, reject) => {\n// window.axios.get(`/api/v1/dashboard/expense/chart`).then((response) => {\n// commit(types.SET_INITIAL_DATA, response.data)\n// resolve(response)\n// }).catch((err) => {\n// reject(err)\n// })\n// })\n// }\n","export const getContacts = (state) => state.contacts\nexport const getInvoices = (state) => state.invoices\nexport const getEstimates = (state) => state.estimates\nexport const getExpenses = (state) => state.expenses\nexport const getRecentInvoices = (state) => state.recentInvoices\nexport const getNewContacts = (state) => state.newContacts\nexport const getTotalDueAmount = (state) => state.totalDueAmount\n\nexport const getDueInvoices = (state) => state.dueInvoices\nexport const getRecentEstimates = (state) => state.recentEstimates\n\nexport const getDashboardDataLoaded = (state) => state.isDashboardDataLoaded\n\nexport const getWeeklyInvoicesCounter = (state) => state.weeklyInvoices.counter\nexport const getWeeklyInvoicesDays = (state) => state.weeklyInvoices.days\n\nexport const getChartMonths = (state) => state.chartData.months\nexport const getChartInvoices = (state) => state.chartData.invoiceTotals\nexport const getChartExpenses = (state) => state.chartData.expenseTotals\nexport const getNetProfits = (state) => state.chartData.netProfits\nexport const getReceiptTotals = (state) => state.chartData.receiptTotals\n\nexport const getTotalSales = (state) => state.salesTotal\nexport const getTotalReceipts = (state) => state.totalReceipts\nexport const getTotalExpenses = (state) => state.totalExpenses\nexport const getNetProfit = (state) => state.netProfit\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n contacts: 0,\n invoices: 0,\n estimates: 0,\n expenses: 0,\n totalDueAmount: [],\n isDashboardDataLoaded: false,\n\n weeklyInvoices: {\n days: [],\n counter: [],\n },\n\n chartData: {\n months: [],\n invoiceTotals: [],\n expenseTotals: [],\n netProfits: [],\n receiptTotals: [],\n },\n\n salesTotal: null,\n totalReceipts: null,\n totalExpenses: null,\n netProfit: null,\n\n dueInvoices: [],\n recentEstimates: [],\n newContacts: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_INITIAL_DATA = 'SET_INITIAL_DATA'\nexport const SET_DASHBOARD_DATA_LOADED_STATE = 'SET_DASHBOARD_DATA_LOADED_STATE'\nexport const DELETE_INVOICE = 'DELETE_INVOICE'\nexport const UPDATE_INVOICE_STATUS = 'UPDATE_INVOICE_STATUS'\nexport const DELETE_ESTIMATE = 'DELETE_ESTIMATE'\nexport const UPDATE_ESTIMATE_STATUS = 'UPDATE_ESTIMATE_STATUS'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_INITIAL_DATA](state, data) {\n state.contacts = data.customersCount\n state.invoices = data.invoicesCount\n state.estimates = data.estimatesCount\n state.expenses = data.expenses\n state.recentInvoices = data.invoices\n state.newContacts = data.contacts\n state.totalDueAmount = data.totalDueAmount\n\n state.dueInvoices = data.dueInvoices\n state.recentEstimates = data.estimates\n\n state.weeklyInvoices.days = data.weekDays\n state.weeklyInvoices.counter = data.counters\n\n if (state.chartData && data.chartData) {\n state.chartData.months = data.chartData.months\n state.chartData.invoiceTotals = data.chartData.invoiceTotals\n state.chartData.expenseTotals = data.chartData.expenseTotals\n state.chartData.netProfits = data.chartData.netProfits\n state.chartData.receiptTotals = data.chartData.receiptTotals\n }\n\n state.salesTotal = data.salesTotal\n state.totalReceipts = data.totalReceipts\n state.totalExpenses = data.totalExpenses\n state.netProfit = data.netProfit\n },\n\n [types.SET_DASHBOARD_DATA_LOADED_STATE](state, data) {\n state.isDashboardDataLoaded = data\n },\n\n [types.UPDATE_INVOICE_STATUS](state, data) {\n let pos = state.dueInvoices.findIndex((invoice) => invoice.id === data.id)\n\n if (state.dueInvoices[pos]) {\n state.dueInvoices[pos].status = data.status\n }\n },\n\n [types.DELETE_INVOICE](state, data) {\n let index = state.dueInvoices.findIndex(\n (invoice) => invoice.id === data.ids[0]\n )\n state.dueInvoices.splice(index, 1)\n },\n\n [types.DELETE_ESTIMATE](state, data) {\n let index = state.recentEstimates.findIndex(\n (estimate) => estimate.id === data.ids[0]\n )\n state.recentEstimates.splice(index, 1)\n },\n\n [types.UPDATE_ESTIMATE_STATUS](state, data) {\n let pos = state.recentEstimates.findIndex(\n (estimate) => estimate.id === data.id\n )\n\n if (state.recentEstimates[pos]) {\n state.recentEstimates[pos].status = data.status\n }\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchDisks = ({ commit }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/disks`, { params })\n .then((response) => {\n commit(types.SET_DISKS, response.data.disks.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchDiskDrivers = ({ commit }) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/disk/drivers`)\n .then((response) => {\n commit(types.SET_DISK_DRIVER, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchDiskEnv = ({ commit }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/disks/${data.disk}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const createDisk = ({ commit }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/disks`, data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateDisk = ({ commit }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/disks/${data.id}`, data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteFileDisk = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .delete(`/api/v1/disks/${id}`)\n .then((response) => {\n if (response.data.success) {\n commit(types.DELETE_DISK, id)\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const getDisks = (state) => state.disks\nexport const getDiskDrivers = (state) => state.diskDrivers\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n disks: [],\n diskDrivers: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_DISKS = 'SET_DISKS'\nexport const SET_DISK_DRIVER = 'SET_DISK_DRIVER'\nexport const ADD_DISKS = 'ADD_DISKS'\nexport const DELETE_DISK = 'DELETE_DISK'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_DISKS](state, disks) {\n state.disks = disks\n },\n\n [types.SET_DISK_DRIVER](state, data) {\n state.diskDrivers = data.drivers\n },\n\n [types.ADD_DISKS](state, data) {\n state.disks.push(data.disk)\n },\n\n [types.DELETE_DISK](state, id) {\n let pos = state.disks.findIndex((disk) => disk.id === id)\n state.disks.splice(pos, 1)\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchEstimateTemplates = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/estimates/templates`, { params })\n .then((response) => {\n commit(types.SET_ESTIMATE_TEMPLATES, response.data.templates)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const getEstimateTemplates = (state) => state.estimateTemplates\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n estimateTemplates: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_ESTIMATE_TEMPLATES = 'SET_ESTIMATE_TEMPLATES'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_ESTIMATE_TEMPLATES](state, templates) {\n state.estimateTemplates = templates\n },\n}\n","import * as types from './mutation-types'\nimport * as dashboardTypes from '../dashboard/mutation-types'\n\nexport const fetchEstimates = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/estimates`, { params })\n .then((response) => {\n commit(types.SET_ESTIMATES, response.data.estimates.data)\n commit(types.SET_TOTAL_ESTIMATES, response.data.estimateTotalCount)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const getRecord = ({ commit, dispatch, state }, record) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/estimates/records?record=${record}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchCreateEstimate = ({ commit, dispatch, state }) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/estimates`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const getEstimateNumber = ({ commit, dispatch, state }) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/next-number?key=estimate`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchEstimate = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/estimates/${id}`)\n .then((response) => {\n commit(\n types.SET_TEMPLATE_ID,\n response.data.estimate.estimate_template_id\n )\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchViewEstimate = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/estimates/${id}`)\n .then((response) => {\n commit(types.VIEW_ESTIMATE, response.data.estimate)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const sendEmail = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/estimates/${data.id}/send`, data)\n .then((response) => {\n if (response.data.success) {\n commit(types.UPDATE_ESTIMATE_STATUS, { id: data.id, status: 'SENT' })\n commit(types.VIEW_ESTIMATE)\n commit(\n 'dashboard/' + dashboardTypes.UPDATE_ESTIMATE_STATUS,\n { id: data.id, status: 'SENT' },\n { root: true }\n )\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addEstimate = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/estimates', data)\n .then((response) => {\n commit(types.ADD_ESTIMATE, response.data.estimate)\n\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteEstimate = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/estimates/delete`, id)\n .then((response) => {\n commit(types.DELETE_ESTIMATE, id)\n commit('dashboard/' + dashboardTypes.DELETE_ESTIMATE, id, {\n root: true,\n })\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteMultipleEstimates = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/estimates/delete`, { ids: state.selectedEstimates })\n .then((response) => {\n commit(types.DELETE_MULTIPLE_ESTIMATES, state.selectedEstimates)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateEstimate = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/estimates/${data.id}`, data)\n .then((response) => {\n commit(types.UPDATE_ESTIMATE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const markAsAccepted = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/estimates/${data.id}/status`, data)\n .then((response) => {\n commit(\n 'dashboard/' + dashboardTypes.UPDATE_ESTIMATE_STATUS,\n { id: data.id, status: 'ACCEPTED' },\n { root: true }\n )\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const markAsRejected = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/estimates/${data.id}/status`, data)\n .then((response) => {\n commit(\n 'dashboard/' + dashboardTypes.UPDATE_ESTIMATE_STATUS,\n { id: data.id, status: 'REJECTED' },\n { root: true }\n )\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const markAsSent = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/estimates/${data.id}/status`, data)\n .then((response) => {\n commit(types.UPDATE_ESTIMATE_STATUS, { id: data.id, status: 'SENT' })\n commit(\n 'dashboard/' + dashboardTypes.UPDATE_ESTIMATE_STATUS,\n { id: data.id, status: 'SENT' },\n { root: true }\n )\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const convertToInvoice = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/estimates/${id}/convert-to-invoice`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const searchEstimate = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/estimates?${data}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const selectEstimate = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECTED_ESTIMATES, data)\n if (state.selectedEstimates.length === state.estimates.length) {\n commit(types.SET_SELECT_ALL_STATE, true)\n } else {\n commit(types.SET_SELECT_ALL_STATE, false)\n }\n}\n\nexport const setSelectAllState = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECT_ALL_STATE, data)\n}\n\nexport const selectAllEstimates = ({ commit, dispatch, state }) => {\n if (state.selectedEstimates.length === state.estimates.length) {\n commit(types.SET_SELECTED_ESTIMATES, [])\n commit(types.SET_SELECT_ALL_STATE, false)\n } else {\n let allEstimateIds = state.estimates.map((estimt) => estimt.id)\n commit(types.SET_SELECTED_ESTIMATES, allEstimateIds)\n commit(types.SET_SELECT_ALL_STATE, true)\n }\n}\n\nexport const resetSelectedEstimates = ({ commit, dispatch, state }) => {\n commit(types.RESET_SELECTED_ESTIMATES)\n}\n\nexport const setCustomer = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_CUSTOMER)\n commit(types.SET_CUSTOMER, data)\n}\n\nexport const setItem = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_ITEM)\n commit(types.SET_ITEM, data)\n}\n\nexport const resetCustomer = ({ commit, dispatch, state }) => {\n commit(types.RESET_CUSTOMER)\n}\n\nexport const resetItem = ({ commit, dispatch, state }) => {\n commit(types.RESET_ITEM)\n}\n\nexport const setTemplate = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n commit(types.SET_TEMPLATE_ID, data)\n resolve({})\n })\n}\n\nexport const selectCustomer = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/customers/${id}`)\n .then((response) => {\n commit(types.RESET_SELECTED_CUSTOMER)\n commit(types.SELECT_CUSTOMER, response.data.customer)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const resetSelectedCustomer = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_SELECTED_CUSTOMER)\n}\n\nexport const selectNote = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_SELECTED_NOTE)\n commit(types.SET_SELECTED_NOTE, data.notes)\n}\n\nexport const resetSelectedNote = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_SELECTED_NOTE)\n}\n","export const estimates = (state) => state.estimates\nexport const selectAllField = (state) => state.selectAllField\nexport const getTemplateId = (state) => state.estimateTemplateId\nexport const selectedEstimates = (state) => state.selectedEstimates\nexport const totalEstimates = (state) => state.totalEstimates\nexport const selectedCustomer = (state) => state.selectedCustomer\nexport const selectedNote = (state) => state.selectedNote\nexport const getEstimate = (state) => (id) => {\n let invId = parseInt(id)\n return state.estimates.find((estimate) => estimate.id === invId)\n}\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n estimates: [],\n estimateTemplateId: 1,\n selectAllField: false,\n selectedEstimates: [],\n totalEstimates: 0,\n selectedCustomer: null,\n selectedEstimate: null,\n selectedNote: null,\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_ESTIMATES = 'SET_ESTIMATES'\nexport const ADD_ESTIMATE = 'ADD_ESTIMATE'\nexport const UPDATE_ESTIMATE = 'UPDATE_ESTIMATE'\nexport const DELETE_ESTIMATE = 'DELETE_ESTIMATE'\nexport const DELETE_MULTIPLE_ESTIMATES = 'DELETE_MULTIPLE_ESTIMATES'\nexport const SET_SELECTED_ESTIMATES = 'SET_SELECTED_ESTIMATES'\nexport const SET_TOTAL_ESTIMATES = 'SET_TOTAL_ESTIMATES'\nexport const RESET_CUSTOMER = 'RESET_CUSTOMER'\nexport const RESET_ITEM = 'RESET_ITEM'\nexport const SET_CUSTOMER = 'SET_CUSTOMER'\nexport const SET_ITEM = 'SET_ITEM'\nexport const SET_TEMPLATE_ID = 'SET_TEMPLATE_ID'\nexport const SELECT_CUSTOMER = 'SELECT_CUSTOMER'\nexport const RESET_SELECTED_CUSTOMER = 'RESET_SELECTED_CUSTOMER'\nexport const SET_SELECT_ALL_STATE = 'SET_SELECT_ALL_STATE'\nexport const RESET_SELECTED_ESTIMATES = 'RESET_SELECTED_ESTIMATES'\nexport const UPDATE_ESTIMATE_STATUS = 'UPDATE_ESTIMATE_STATUS'\nexport const VIEW_ESTIMATE = 'VIEW_ESTIMATE'\n\nexport const SET_SELECTED_NOTE = 'SET_SELECTED_NOTE'\nexport const RESET_SELECTED_NOTE = 'RESET_SELECTED_NOTE'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_ESTIMATES](state, data) {\n state.estimates = data\n },\n\n [types.SET_TOTAL_ESTIMATES](state, totalEstimates) {\n state.totalEstimates = totalEstimates\n },\n\n [types.ADD_ESTIMATE](state, data) {\n state.estimates = [...state.estimates, data]\n },\n\n [types.DELETE_ESTIMATE](state, id) {\n let index = state.estimates.findIndex((estimate) => estimate.id === id)\n state.estimates.splice(index, 1)\n },\n\n [types.SET_SELECTED_ESTIMATES](state, data) {\n state.selectedEstimates = data\n },\n\n [types.DELETE_MULTIPLE_ESTIMATES](state, selectedEstimates) {\n selectedEstimates.forEach((estimate) => {\n let index = state.estimates.findIndex((_est) => _est.id === estimate.id)\n state.estimates.splice(index, 1)\n })\n\n state.selectedEstimates = []\n },\n\n [types.UPDATE_ESTIMATE](state, data) {\n let pos = state.estimates.findIndex(\n (estimate) => estimate.id === data.estimate.id\n )\n\n state.estimates[pos] = data.estimate\n },\n\n [types.UPDATE_ESTIMATE_STATUS](state, data) {\n let pos = state.estimates.findIndex((estimate) => estimate.id === data.id)\n if (state.estimates[pos]) {\n // state.estimates[pos] = { ...state.estimates[pos], status: data.status }\n state.estimates[pos].status = data.status\n }\n },\n\n [types.RESET_SELECTED_ESTIMATES](state, data) {\n state.selectedEstimates = []\n state.selectAllField = false\n },\n\n [types.SET_TEMPLATE_ID](state, templateId) {\n state.estimateTemplateId = templateId\n },\n\n [types.SELECT_CUSTOMER](state, data) {\n state.selectedCustomer = data\n },\n\n [types.RESET_SELECTED_CUSTOMER](state, data) {\n state.selectedCustomer = null\n },\n\n [types.SET_SELECT_ALL_STATE](state, data) {\n state.selectAllField = data\n },\n\n [types.VIEW_ESTIMATE](state, estimate) {\n state.selectedEstimate = estimate\n },\n\n [types.SET_SELECTED_NOTE](state, data) {\n state.selectedNote = data\n },\n\n [types.RESET_SELECTED_NOTE](state, data) {\n state.selectedNote = null\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchExpenses = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/expenses`, { params })\n .then((response) => {\n commit(types.SET_EXPENSES, response.data.expenses.data)\n commit(types.SET_TOTAL_EXPENSES, response.data.expenseTotalCount)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchExpense = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/expenses/${id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const getExpenseReceipt = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/expenses/${id}/show/receipt`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const uploadExpenseReceipt = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/expenses/${data.id}/upload/receipts`, data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addExpense = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/expenses', data)\n .then((response) => {\n commit(types.ADD_EXPENSE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateExpense = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/expenses/${data.id}`, data.editData)\n .then((response) => {\n commit(types.UPDATE_EXPENSE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteExpense = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/expenses/delete`, id)\n .then((response) => {\n commit(types.DELETE_EXPENSE, id)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteMultipleExpenses = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/expenses/delete`, { ids: state.selectedExpenses })\n .then((response) => {\n commit(types.DELETE_MULTIPLE_EXPENSES, state.selectedExpenses)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const setSelectAllState = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECT_ALL_STATE, data)\n}\n\nexport const selectAllExpenses = ({ commit, dispatch, state }) => {\n if (state.selectedExpenses.length === state.expenses.length) {\n commit(types.SET_SELECTED_EXPENSES, [])\n commit(types.SET_SELECT_ALL_STATE, false)\n } else {\n let allExpenseIds = state.expenses.map((cust) => cust.id)\n commit(types.SET_SELECTED_EXPENSES, allExpenseIds)\n commit(types.SET_SELECT_ALL_STATE, true)\n }\n}\n\nexport const selectExpense = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECTED_EXPENSES, data)\n if (state.selectedExpenses.length === state.expenses.length) {\n commit(types.SET_SELECT_ALL_STATE, true)\n } else {\n commit(types.SET_SELECT_ALL_STATE, false)\n }\n}\n","export const expenses = (state) => state.expenses\nexport const selectAllField = (state) => state.selectAllField\nexport const selectedExpenses = (state) => state.selectedExpenses\nexport const totalExpenses = (state) => state.totalExpenses\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n expenses: [],\n totalExpenses: 0,\n selectAllField: false,\n selectedExpenses: []\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations\n}\n","export const SET_EXPENSES = 'SET_EXPENSES'\nexport const ADD_EXPENSE = 'ADD_EXPENSE'\nexport const UPDATE_EXPENSE = 'UPDATE_EXPENSE'\nexport const SET_SELECT_ALL = 'SET_SELECT_ALL'\nexport const DELETE_EXPENSE = 'DELETE_EXPENSE'\nexport const DELETE_MULTIPLE_EXPENSES = 'DELETE_MULTIPLE_EXPENSES'\nexport const SET_SELECTED_EXPENSES = 'SET_SELECTED_EXPENSES'\nexport const SET_TOTAL_EXPENSES = 'SET_TOTAL_EXPENSES'\nexport const SET_SELECT_ALL_STATE = 'SET_SELECT_ALL_STATE'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_EXPENSES] (state, expenses) {\n state.expenses = expenses\n },\n\n [types.ADD_EXPENSE] (state, expense) {\n state.expenses.push(expense)\n },\n\n [types.UPDATE_EXPENSE] (state, data) {\n let pos = state.expenses.findIndex(expense => expense.id === data.expense.id)\n\n state.expenses[pos] = data.expense\n },\n\n [types.DELETE_EXPENSE] (state, id) {\n let index = state.expenses.findIndex(expense => expense.id === id)\n state.expenses.splice(index, 1)\n },\n\n [types.SET_SELECT_ALL] (state, selectAll) {\n if (selectAll) {\n state.expenses.filter(expense => {\n state.selectedRow.push(expense.id)\n })\n } else {\n state.selectedRow = []\n }\n },\n\n [types.SET_TOTAL_EXPENSES] (state, totalExpenses) {\n state.totalExpenses = totalExpenses\n },\n\n [types.DELETE_EXPENSE] (state, id) {\n let index = state.expenses.findIndex(expense => expense.id === id)\n state.expenses.splice(index, 1)\n },\n\n [types.DELETE_MULTIPLE_EXPENSES] (state, selectedExpenses) {\n selectedExpenses.forEach((expense) => {\n let index = state.expenses.findIndex(_exp => _exp.id === expense.id)\n state.expenses.splice(index, 1)\n })\n\n state.selectedExpenses = []\n },\n\n [types.SET_SELECTED_EXPENSES] (state, data) {\n state.selectedExpenses = data\n },\n\n [types.SET_SELECT_ALL_STATE] (state, data) {\n state.selectAllField = data\n }\n}\n","import * as types from './mutation-types'\n\nexport const fetchInvoiceTemplates = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/invoices/templates`, { params })\n .then((response) => {\n commit(types.SET_INVOICE_TEMPLATES, response.data.invoiceTemplates)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const getInvoiceTemplates = (state) => state.invoiceTemplates\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n invoiceTemplates: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_INVOICE_TEMPLATES = 'SET_INVOICE_TEMPLATES'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_INVOICE_TEMPLATES](state, templates) {\n state.invoiceTemplates = templates\n },\n}\n","import * as types from './mutation-types'\nimport * as dashboardTypes from '../dashboard/mutation-types'\n\nexport const fetchInvoices = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/invoices`, { params })\n .then((response) => {\n commit(types.SET_INVOICES, response.data.invoices.data)\n commit(types.SET_TOTAL_INVOICES, response.data.invoiceTotalCount)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchInvoice = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/invoices/${id}`)\n .then((response) => {\n commit(types.SET_TEMPLATE_ID, response.data.invoice.invoice_template_id)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const sendEmail = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/invoices/${data.id}/send`, data)\n .then((response) => {\n if (response.data.success) {\n commit(types.UPDATE_INVOICE_STATUS, { id: data.id, status: 'SENT' })\n commit(\n 'dashboard/' + dashboardTypes.UPDATE_INVOICE_STATUS,\n { id: data.id, status: 'SENT' },\n { root: true }\n )\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addInvoice = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/invoices', data)\n .then((response) => {\n commit(types.ADD_INVOICE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteInvoice = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/invoices/delete`, id)\n .then((response) => {\n if (response.data.error) {\n resolve(response)\n } else {\n commit(types.DELETE_INVOICE, id)\n commit('dashboard/' + dashboardTypes.DELETE_INVOICE, id, {\n root: true,\n })\n resolve(response)\n }\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteMultipleInvoices = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/invoices/delete`, { ids: state.selectedInvoices })\n .then((response) => {\n if (response.data.error) {\n resolve(response)\n } else {\n commit(types.DELETE_MULTIPLE_INVOICES, state.selectedInvoices)\n resolve(response)\n }\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateInvoice = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/invoices/${data.id}`, data)\n .then((response) => {\n if (response.data.invoice) {\n commit(types.UPDATE_INVOICE, response.data)\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const markAsSent = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/invoices/${data.id}/status`, data)\n .then((response) => {\n commit(types.UPDATE_INVOICE_STATUS, { id: data.id, status: 'SENT' })\n commit(\n 'dashboard/' + dashboardTypes.UPDATE_INVOICE_STATUS,\n { id: data.id, status: 'SENT' },\n {\n root: true,\n }\n )\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const cloneInvoice = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/invoices/${data.id}/clone`, data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const searchInvoice = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/invoices?${data}`)\n .then((response) => {\n // commit(types.UPDATE_INVOICE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const getInvoiceNumber = ({ commit, dispatch, state }) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/next-number?key=invoice`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const selectInvoice = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECTED_INVOICES, data)\n if (state.selectedInvoices.length === state.invoices.length) {\n commit(types.SET_SELECT_ALL_STATE, true)\n } else {\n commit(types.SET_SELECT_ALL_STATE, false)\n }\n}\n\nexport const setSelectAllState = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECT_ALL_STATE, data)\n}\n\nexport const selectAllInvoices = ({ commit, dispatch, state }) => {\n if (state.selectedInvoices.length === state.invoices.length) {\n commit(types.SET_SELECTED_INVOICES, [])\n commit(types.SET_SELECT_ALL_STATE, false)\n } else {\n let allInvoiceIds = state.invoices.map((inv) => inv.id)\n commit(types.SET_SELECTED_INVOICES, allInvoiceIds)\n commit(types.SET_SELECT_ALL_STATE, true)\n }\n}\n\nexport const resetSelectedInvoices = ({ commit, dispatch, state }) => {\n commit(types.RESET_SELECTED_INVOICES)\n}\nexport const setCustomer = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_CUSTOMER)\n commit(types.SET_CUSTOMER, data)\n}\n\nexport const resetCustomer = ({ commit, dispatch, state }) => {\n commit(types.RESET_CUSTOMER)\n}\n\nexport const setTemplate = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n commit(types.SET_TEMPLATE_ID, data)\n resolve({})\n })\n}\n\nexport const selectCustomer = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/customers/${id}`)\n .then((response) => {\n commit(types.RESET_SELECTED_CUSTOMER)\n commit(types.SELECT_CUSTOMER, response.data.customer)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const resetSelectedCustomer = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_SELECTED_CUSTOMER)\n}\n\nexport const setItem = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_ITEM)\n commit(types.SET_ITEM, data)\n}\n\nexport const resetItem = ({ commit, dispatch, state }) => {\n commit(types.RESET_ITEM)\n}\n\nexport const selectNote = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_SELECTED_NOTE)\n commit(types.SET_SELECTED_NOTE, data.notes)\n}\n\nexport const resetSelectedNote = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_SELECTED_NOTE)\n}\n","export const invoices = (state) => state.invoices\nexport const selectAllField = (state) => state.selectAllField\nexport const getTemplateId = (state) => state.invoiceTemplateId\nexport const selectedInvoices = (state) => state.selectedInvoices\nexport const totalInvoices = (state) => state.totalInvoices\nexport const selectedCustomer = (state) => state.selectedCustomer\nexport const selectedNote = (state) => state.selectedNote\nexport const selectedItem = (state) => state.selectedItem\nexport const getInvoice = (state) => (id) => {\n let invId = parseInt(id)\n return state.invoices.find((invoice) => invoice.id === invId)\n}\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n invoices: [],\n invoiceTemplateId: 1,\n selectedInvoices: [],\n selectAllField: false,\n totalInvoices: 0,\n selectedCustomer: null,\n selectedNote: null,\n selectedItem: null,\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_INVOICES = 'SET_INVOICES'\nexport const ADD_INVOICE = 'ADD_INVOICE'\nexport const UPDATE_INVOICE = 'UPDATE_INVOICE'\nexport const DELETE_INVOICE = 'DELETE_INVOICE'\nexport const DELETE_MULTIPLE_INVOICES = 'DELETE_MULTIPLE_INVOICES'\nexport const SET_SELECTED_INVOICES = 'SET_SELECTED_INVOICES'\nexport const SET_TOTAL_INVOICES = 'SET_TOTAL_INVOICES'\n\nexport const RESET_CUSTOMER = 'RESET_CUSTOMER'\nexport const SET_CUSTOMER = 'SET_CUSTOMER'\n\nexport const RESET_ITEM = 'RESET_ITEM'\nexport const SET_ITEM = 'SET_ITEM'\n\nexport const SET_TEMPLATE_ID = 'SET_TEMPLATE_ID'\n\nexport const SELECT_CUSTOMER = 'SELECT_CUSTOMER'\nexport const RESET_SELECTED_CUSTOMER = 'RESET_SELECTED_CUSTOMER'\n\nexport const SET_SELECT_ALL_STATE = 'SET_SELECT_ALL_STATE'\nexport const RESET_SELECTED_INVOICES = 'RESET_SELECTED_INVOICES'\nexport const UPDATE_INVOICE_STATUS = 'UPDATE_INVOICE_STATUS'\n\nexport const RESET_SELECTED_NOTE = 'RESET_SELECTED_NOTE'\nexport const SET_SELECTED_NOTE = 'SET_SELECTED_NOTE'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_INVOICES](state, invoices) {\n state.invoices = invoices\n },\n\n [types.SET_TOTAL_INVOICES](state, totalInvoices) {\n state.totalInvoices = totalInvoices\n },\n\n [types.ADD_INVOICE](state, data) {\n state.invoices.push(data)\n },\n\n [types.DELETE_INVOICE](state, data) {\n let index = state.invoices.findIndex((invoice) => invoice.id === data.id)\n state.invoices.splice(index, 1)\n },\n\n [types.SET_SELECTED_INVOICES](state, data) {\n state.selectedInvoices = data\n },\n\n [types.UPDATE_INVOICE](state, data) {\n let pos = state.invoices.findIndex(\n (invoice) => invoice.id === data.invoice.id\n )\n\n state.invoices[pos] = data.invoice\n },\n\n [types.UPDATE_INVOICE_STATUS](state, data) {\n let pos = state.invoices.findIndex((invoice) => invoice.id === data.id)\n\n if (state.invoices[pos]) {\n state.invoices[pos].status = data.status\n }\n },\n\n [types.RESET_SELECTED_INVOICES](state, data) {\n state.selectedInvoices = []\n state.selectAllField = false\n },\n\n [types.DELETE_MULTIPLE_INVOICES](state, selectedInvoices) {\n selectedInvoices.forEach((invoice) => {\n let index = state.invoices.findIndex((_inv) => _inv.id === invoice.id)\n state.invoices.splice(index, 1)\n })\n state.selectedInvoices = []\n },\n\n [types.SET_TEMPLATE_ID](state, templateId) {\n state.invoiceTemplateId = templateId\n },\n\n [types.SELECT_CUSTOMER](state, data) {\n state.selectedCustomer = data\n },\n\n [types.RESET_SELECTED_CUSTOMER](state, data) {\n state.selectedCustomer = null\n },\n\n [types.SET_SELECT_ALL_STATE](state, data) {\n state.selectAllField = data\n },\n\n [types.RESET_SELECTED_NOTE](state, data) {\n state.selectedNote = null\n },\n\n [types.SET_SELECTED_NOTE](state, data) {\n state.selectedNote = data\n },\n\n [types.RESET_ITEM](state, data) {\n state.selectedItem = null\n },\n\n [types.SET_ITEM](state, data) {\n state.selectedItem = data\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchItems = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/items`, { params })\n .then((response) => {\n commit(types.BOOTSTRAP_ITEMS, response.data.items.data)\n commit(types.SET_TOTAL_ITEMS, response.data.itemTotalCount)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchItem = ({ commit, dispatch }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/items/${id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addItem = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/items', data)\n .then((response) => {\n commit(types.ADD_ITEM, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateItem = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/items/${data.id}`, data)\n .then((response) => {\n commit(types.UPDATE_ITEM, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteItem = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/items/delete`, id)\n .then((response) => {\n commit(types.DELETE_ITEM, id)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteMultipleItems = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/items/delete`, { ids: state.selectedItems })\n .then((response) => {\n commit(types.DELETE_MULTIPLE_ITEMS, state.selectedItems)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const setSelectAllState = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECT_ALL_STATE, data)\n}\n\nexport const selectAllItems = ({ commit, dispatch, state }) => {\n if (state.selectedItems.length === state.items.length) {\n commit(types.SET_SELECTED_ITEMS, [])\n commit(types.SET_SELECT_ALL_STATE, false)\n } else {\n let allItemIds = state.items.map((item) => item.id)\n commit(types.SET_SELECTED_ITEMS, allItemIds)\n commit(types.SET_SELECT_ALL_STATE, true)\n }\n}\n\nexport const selectItem = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECTED_ITEMS, data)\n if (state.selectedItems.length === state.items.length) {\n commit(types.SET_SELECT_ALL_STATE, true)\n } else {\n commit(types.SET_SELECT_ALL_STATE, false)\n }\n}\n\nexport const addItemUnit = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/units`, data)\n .then((response) => {\n commit(types.ADD_ITEM_UNIT, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateItemUnit = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/units/${data.id}`, data)\n .then((response) => {\n commit(types.UPDATE_ITEM_UNIT, response.data.unit)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchItemUnits = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/units`, { params })\n .then((response) => {\n commit(types.SET_ITEM_UNITS, response.data.units.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fatchItemUnit = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/units/${id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteItemUnit = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .delete(`/api/v1/units/${id}`)\n .then((response) => {\n if (!response.data.error) {\n commit(types.DELETE_ITEM_UNIT, id)\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const items = (state) => state.items\nexport const selectAllField = (state) => state.selectAllField\nexport const selectedItems = (state) => state.selectedItems\nexport const totalItems = (state) => state.totalItems\nexport const itemUnits = (state) => state.itemUnits\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n items: [],\n totalItems: 0,\n selectAllField: false,\n selectedItems: [],\n itemUnits: []\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations\n}\n","export const BOOTSTRAP_ITEMS = 'BOOTSTRAP_ITEMS'\nexport const ADD_ITEM = 'ADD_ITEM'\nexport const UPDATE_ITEM = 'UPDATE_ITEM'\nexport const DELETE_ITEM = 'DELETE_ITEM'\nexport const DELETE_MULTIPLE_ITEMS = 'DELETE_MULTIPLE_ITEMS'\nexport const SET_SELECTED_ITEMS = 'SET_SELECTED_ITEMS'\nexport const SET_TOTAL_ITEMS = 'SET_TOTAL_ITEMS'\nexport const SET_SELECT_ALL_STATE = 'SET_SELECT_ALL_STATE'\nexport const ADD_ITEM_UNIT = 'ADD_ITEM_UNIT'\nexport const SET_ITEM_UNITS = 'SET_ITEM_UNITS'\nexport const UPDATE_ITEM_UNIT = 'UPDATE_ITEM_UNIT'\nexport const DELETE_ITEM_UNIT = 'DELETE_ITEM_UNIT'\n","import * as types from './mutation-types'\n\nexport default {\n [types.BOOTSTRAP_ITEMS](state, items) {\n state.items = items\n },\n\n [types.SET_TOTAL_ITEMS](state, totalItems) {\n state.totalItems = totalItems\n },\n\n [types.ADD_ITEM](state, data) {\n state.items.push(data.item)\n },\n\n [types.UPDATE_ITEM](state, data) {\n let pos = state.items.findIndex((item) => item.id === data.item.id)\n\n state.items[pos] = data.item\n },\n\n [types.DELETE_ITEM](state, id) {\n let index = state.items.findIndex((item) => item.id === id)\n state.items.splice(index, 1)\n },\n\n [types.DELETE_MULTIPLE_ITEMS](state, selectedItems) {\n selectedItems.forEach((item) => {\n let index = state.items.findIndex((_item) => _item.id === item.id)\n state.items.splice(index, 1)\n })\n\n state.selectedItems = []\n },\n\n [types.SET_SELECTED_ITEMS](state, data) {\n state.selectedItems = data\n },\n\n [types.SET_SELECT_ALL_STATE](state, data) {\n state.selectAllField = data\n },\n\n [types.ADD_ITEM_UNIT](state, data) {\n state.itemUnits.push(data.unit)\n },\n\n [types.SET_ITEM_UNITS](state, itemUnits) {\n state.itemUnits = itemUnits\n },\n\n [types.DELETE_ITEM_UNIT](state, id) {\n let index = state.itemUnits.findIndex((unit) => unit.id === id)\n state.itemUnits.splice(index, 1)\n },\n\n [types.UPDATE_ITEM_UNIT](state, unit) {\n let pos = state.itemUnits.findIndex((unit) => unit.id === unit.id)\n state.itemUnits[pos] = unit\n },\n}\n","import * as types from './mutation-types'\n\nexport const openModal = ({ commit, dispatch, state }, payload) => {\n commit(types.SET_COMPONENT_NAME, payload.componentName)\n commit(types.SHOW_MODAL, true)\n\n if (payload.id) {\n commit(types.SET_ID, payload.id)\n }\n commit(types.SET_TITLE, payload.title)\n\n if (payload.data) {\n commit(types.SET_DATA, payload.data)\n }\n\n if (payload.refreshData) {\n commit(types.SET_REFRESH_DATA, payload.refreshData)\n }\n\n if (payload.variant) {\n commit(types.SET_VARIANT, payload.variant)\n }\n\n if (payload.size) {\n commit(types.SET_SIZE, payload.size)\n }\n}\n\nexport const closeModal = ({ commit, dispatch, state }) => {\n commit(types.RESET_DATA)\n commit(types.HIDE_MODAL, false)\n}\n\nexport const resetModalData = ({ commit, dispatch, state }) => {\n commit(types.RESET_DATA)\n}\n","export const modalActive = (state) => state.active\nexport const modalTitle = (state) => state.title\nexport const componentName = (state) => state.componentName\nexport const modalDataID = (state) => state.id\nexport const modalData = (state) => state.data\nexport const modalSize = (state) => state.size\nexport const refreshData = (state) => state.refreshData\nexport const variant = (state) => state.variant\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n active: false,\n content: '',\n title: '',\n componentName: '',\n id: '',\n size: 'md',\n data: null,\n refreshData: null,\n variant: '',\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SHOW_MODAL = 'SHOW_MODAL'\nexport const SET_TITLE = 'SET_TITLE'\nexport const SET_COMPONENT_NAME = 'SET_COMPONENT_NAME'\nexport const HIDE_MODAL = 'HIDE_MODAL'\nexport const SET_ID = 'SET_ID'\nexport const SET_SIZE = 'SET_SIZE'\nexport const SET_DATA = 'SET_DATA'\nexport const RESET_DATA = 'RESET_DATA'\nexport const SET_REFRESH_DATA = 'SET_REFRESH_DATA'\nexport const SET_VARIANT = 'SET_VARIANT'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SHOW_MODAL](state, data) {\n state.active = data\n },\n\n [types.HIDE_MODAL](state, data) {\n state.active = data\n },\n\n [types.SET_TITLE](state, data) {\n state.title = data\n },\n\n [types.SET_COMPONENT_NAME](state, data) {\n state.componentName = data\n },\n\n [types.SET_ID](state, data) {\n state.id = data\n },\n\n [types.SET_DATA](state, data) {\n state.data = data\n },\n\n [types.SET_SIZE](state, size) {\n state.size = size\n },\n\n [types.SET_REFRESH_DATA](state, refreshData) {\n state.refreshData = refreshData\n },\n\n [types.RESET_DATA](state) {\n state.content = ''\n state.title = ''\n state.componentName = ''\n state.id = ''\n state.data = null\n state.refreshData = null\n },\n\n [types.SET_VARIANT](state, data) {\n state.variant = data\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchNotes = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/notes`, { params })\n .then((response) => {\n commit(types.BOOTSTRAP_NOTES, response.data.notes.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchNote = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/notes/${id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addNote = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/notes', data)\n .then((response) => {\n commit(types.ADD_NOTE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateNote = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/notes/${data.id}`, data)\n .then((response) => {\n commit(types.UPDATE_NOTE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteNote = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .delete(`/api/v1/notes/${id}`)\n .then((response) => {\n commit(types.DELETE_NOTE, id)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const notes = (state) => state.notes\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n notes: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const BOOTSTRAP_NOTES = 'BOOTSTRAP_NOTES'\nexport const ADD_NOTE = 'ADD_NOTE'\nexport const UPDATE_NOTE = 'UPDATE_NOTE'\nexport const DELETE_NOTE = 'DELETE_NOTE'\n","import * as types from './mutation-types'\n\nexport default {\n [types.BOOTSTRAP_NOTES](state, notes) {\n state.notes = notes\n },\n\n [types.ADD_NOTE](state, data) {\n state.notes.push(data.note)\n },\n\n [types.UPDATE_NOTE](state, data) {\n let pos = state.notes.findIndex((note) => note.id === data.note.id)\n\n state.notes[pos] = data.note\n },\n\n [types.DELETE_NOTE](state, id) {\n let index = state.notes.findIndex((note) => note.id === id)\n state.notes.splice(index, 1)\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchPayments = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/payments`, { params })\n .then((response) => {\n commit(types.SET_PAYMENTS, response.data.payments.data)\n commit(types.SET_TOTAL_PAYMENTS, response.data.paymentTotalCount)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchPayment = ({ commit, dispatch }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/payments/${id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addPayment = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/payments', data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const setSelectAllState = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECT_ALL_STATE, data)\n}\n\nexport const selectPayment = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECTED_PAYMENTS, data)\n if (state.selectedPayments.length === state.payments.length) {\n commit(types.SET_SELECT_ALL_STATE, true)\n } else {\n commit(types.SET_SELECT_ALL_STATE, false)\n }\n}\n\nexport const updatePayment = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/payments/${data.id}`, data.editData)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteMultiplePayments = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/payments/delete`, { ids: state.selectedPayments })\n .then((response) => {\n commit(types.DELETE_MULTIPLE_PAYMENTS, state.selectedPayments)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deletePayment = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/payments/delete`, id)\n .then((response) => {\n commit(types.DELETE_PAYMENT, id)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const selectAllPayments = ({ commit, dispatch, state }) => {\n if (state.selectedPayments.length === state.payments.length) {\n commit(types.SET_SELECTED_PAYMENTS, [])\n commit(types.SET_SELECT_ALL_STATE, false)\n } else {\n let allPaymentIds = state.payments.map((pay) => pay.id)\n commit(types.SET_SELECTED_PAYMENTS, allPaymentIds)\n commit(types.SET_SELECT_ALL_STATE, true)\n }\n}\n\nexport const addPaymentMode = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/payment-methods`, data)\n .then((response) => {\n commit(types.ADD_PAYMENT_MODE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updatePaymentMode = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/payment-methods/${data.id}`, data)\n .then((response) => {\n commit(types.UPDATE_PAYMENT_MODE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchPaymentModes = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/payment-methods`, { params })\n .then((response) => {\n commit(types.SET_PAYMENT_MODES, response.data.paymentMethods.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchPaymentMode = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/payment-methods/${data.id}`, data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deletePaymentMode = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .delete(`/api/v1/payment-methods/${id}`)\n .then((response) => {\n if (!response.data.error) {\n commit(types.DELETE_PAYMENT_MODE, id)\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const sendEmail = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/payments/${data.id}/send`, data)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const searchPayment = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/payments?${data}`)\n .then((response) => {\n // commit(types.UPDATE_INVOICE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const selectNote = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_SELECTED_NOTE)\n commit(types.SET_SELECTED_NOTE, data.notes)\n}\n\nexport const resetSelectedNote = ({ commit, dispatch, state }, data) => {\n commit(types.RESET_SELECTED_NOTE)\n}\n","export const payments = (state) => state.payments\nexport const selectedPayments = (state) => state.selectedPayments\nexport const selectAllField = (state) => state.selectAllField\nexport const totalPayments = (state) => state.totalPayments\nexport const paymentModes = (state) => state.paymentModes\nexport const selectedNote = (state) => state.selectedNote\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n payments: [],\n totalPayments: 0,\n selectAllField: false,\n selectedPayments: [],\n paymentModes: [],\n selectedNote: null,\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_PAYMENTS = 'SET_PAYMENTS'\nexport const ADD_PAYMENT = 'ADD_PAYMENT'\nexport const UPDATE_PAYMENT = 'UPDATE_PAYMENT'\nexport const DELETE_PAYMENT = 'DELETE_PAYMENT'\nexport const DELETE_MULTIPLE_PAYMENTS = 'DELETE_MULTIPLE_PAYMENTS'\nexport const SET_SELECTED_PAYMENTS = 'SET_SELECTED_PAYMENTS'\nexport const SET_TOTAL_PAYMENTS = 'SET_TOTAL_PAYMENTS'\nexport const SET_SELECT_ALL_STATE = 'SET_SELECT_ALL_STATE'\nexport const ADD_PAYMENT_MODE = 'ADD_PAYMENT_MODE'\nexport const DELETE_PAYMENT_MODE = 'DELETE_PAYMENT_MODE'\nexport const SET_PAYMENT_MODES = 'SET_PAYMENT_MODES'\nexport const UPDATE_PAYMENT_MODE = 'UPDATE_PAYMENT_MODE'\n\nexport const RESET_SELECTED_NOTE = 'RESET_SELECTED_NOTE'\nexport const SET_SELECTED_NOTE = 'SET_SELECTED_NOTE'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_PAYMENTS](state, payments) {\n state.payments = payments\n },\n\n [types.SET_TOTAL_PAYMENTS](state, totalPayments) {\n state.totalPayments = totalPayments\n },\n\n [types.ADD_PAYMENT](state, data) {\n state.payments.push(data)\n },\n\n [types.DELETE_PAYMENT](state, id) {\n let index = state.payments.findIndex((payment) => payment.id === id)\n state.payments.splice(index, 1)\n },\n\n [types.DELETE_MULTIPLE_PAYMENTS](state, selectedPayments) {\n selectedPayments.forEach((payment) => {\n let index = state.payments.findIndex((_inv) => _inv.id === payment.id)\n state.payments.splice(index, 1)\n })\n\n state.selectedPayments = []\n },\n\n [types.SET_SELECTED_PAYMENTS](state, data) {\n state.selectedPayments = data\n },\n\n [types.SET_SELECT_ALL_STATE](state, data) {\n state.selectAllField = data\n },\n\n [types.SET_PAYMENT_MODES](state, data) {\n state.paymentModes = data\n },\n\n [types.ADD_PAYMENT_MODE](state, data) {\n state.paymentModes = [data.paymentMethod, ...state.paymentModes]\n },\n\n [types.DELETE_PAYMENT_MODE](state, id) {\n let index = state.paymentModes.findIndex(\n (paymentMethod) => paymentMethod.id === id\n )\n state.paymentModes.splice(index, 1)\n },\n\n [types.UPDATE_PAYMENT_MODE](state, data) {\n let pos = state.paymentModes.findIndex(\n (paymentMethod) => paymentMethod.id === data.paymentMethod.id\n )\n state.paymentModes[pos] = data.paymentMethod\n },\n\n [types.RESET_SELECTED_NOTE](state, data) {\n state.selectedNote = null\n },\n\n [types.SET_SELECTED_NOTE](state, data) {\n state.selectedNote = data\n },\n}\n","import * as types from './mutation-types'\n\nexport const searchUsers = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/search`, { params })\n .then((response) => {\n commit(types.SET_CUSTOMER_LISTS, response.data.customers.data)\n commit(types.SET_USER_LISTS, response.data.users.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const getCustomerList = (state) =>\n state.customerList ? state.customerList : []\n\nexport const getUserList = (state) => (state.userList ? state.userList : [])\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n userList: [],\n customerList: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_CUSTOMER_LISTS = 'SET_CUSTOMER_LISTS'\nexport const SET_USER_LISTS = 'SET_USER_LISTS'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_CUSTOMER_LISTS](state, customerList) {\n state.customerList = customerList\n },\n\n [types.SET_USER_LISTS](state, userList) {\n state.userList = userList\n },\n}\n","import * as types from './mutation-types'\n\nexport const fetchTaxTypes = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/tax-types`, { params })\n .then((response) => {\n commit(types.SET_TAX_TYPES, response.data.taxTypes.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchTaxTypesList = ({ commit, dispatch, state }) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/tax-types?limit=500`)\n .then((response) => {\n commit(types.SET_TAX_TYPES, response.data.taxTypes)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addTaxType = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/tax-types', data)\n .then((response) => {\n commit(types.ADD_TAX_TYPE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchTaxType = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/tax-types/${id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateTaxType = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/tax-types/${data.id}`, data)\n .then((response) => {\n commit(types.UPDATE_TAX_TYPE, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteTaxType = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .delete(`/api/v1/tax-types/${id}`)\n .then((response) => {\n if (response.data.success) {\n commit(types.DELETE_TAX_TYPE, id)\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const taxTypes = (state) => state.taxTypes\n\nexport const getTaxTypeById = (state) => (id) => {\n return state.taxTypes.find(taxType => taxType.id === id)\n}\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n taxTypes: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const SET_TAX_TYPES = 'SET_TAX_TYPES'\nexport const ADD_TAX_TYPE = 'ADD_TAX_TYPE'\nexport const UPDATE_TAX_TYPE = 'UPDATE_TAX_TYPE'\nexport const DELETE_TAX_TYPE = 'DELETE_TAX_TYPE'\n","import * as types from './mutation-types'\n\nexport default {\n [types.SET_TAX_TYPES](state, taxTypes) {\n state.taxTypes = taxTypes\n },\n\n [types.ADD_TAX_TYPE](state, data) {\n state.taxTypes.push(data.taxType)\n },\n\n [types.UPDATE_TAX_TYPE](state, data) {\n let pos = state.taxTypes.findIndex(\n (taxType) => taxType.id === data.taxType.id\n )\n Object.assign(state.taxTypes[pos], { ...data.taxType })\n },\n\n [types.DELETE_TAX_TYPE](state, id) {\n let pos = state.taxTypes.findIndex((taxType) => taxType.id === id)\n state.taxTypes.splice(pos, 1)\n },\n}\n","import { reject } from 'lodash'\nimport * as types from './mutation-types'\n\nexport const updateCurrentUser = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n axios\n .put('/api/v1/me', data)\n .then((response) => {\n commit(types.UPDATE_CURRENT_USER, response.data.user)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchCurrentUser = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/me`, params)\n .then((response) => {\n commit(types.BOOTSTRAP_CURRENT_USER, response.data.user)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const uploadAvatar = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/me/upload-avatar', data)\n .then((response) => {\n commit(types.UPDATE_USER_AVATAR, response.data.user)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchUserSettings = ({ commit, dispatch, state }, settings) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get('/api/v1/me/settings', {\n params: {\n settings,\n },\n })\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateUserSettings = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put('/api/v1/me/settings', data)\n .then((response) => {\n commit(types.SET_DEFAULT_LANGUAGE, data.settings.language)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n","export const currentUser = (state) => state.currentUser\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n currentUser: null,\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const RESET_CURRENT_USER = 'RESET_CURRENT_USER'\n\nexport const BOOTSTRAP_CURRENT_USER = 'BOOTSTRAP_CURRENT_USER'\n\nexport const UPDATE_CURRENT_USER = 'UPDATE_CURRENT_USER'\n\nexport const UPDATE_USER_AVATAR = 'UPDATE_USER_AVATAR'\n\nexport const SET_DEFAULT_LANGUAGE = 'SET_DEFAULT_LANGUAGE'\n","import * as types from './mutation-types'\n\nexport default {\n [types.RESET_CURRENT_USER](state, user) {\n state.currentUser = null\n },\n\n [types.BOOTSTRAP_CURRENT_USER](state, user) {\n state.currentUser = user\n },\n\n [types.UPDATE_CURRENT_USER](state, user) {\n state.currentUser = user\n },\n\n [types.UPDATE_USER_AVATAR](state, data) {\n if (state.currentUser) {\n state.currentUser.avatar = data.avatar\n }\n },\n\n [types.SET_DEFAULT_LANGUAGE](state, data) {\n window.i18n.locale = data\n },\n}\n","import * as types from './mutation-types'\nimport * as searchTypes from '../search/mutation-types'\n\nexport const fetchUsers = ({ commit, dispatch, state }, params) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/users`, { params })\n .then((response) => {\n commit(types.BOOTSTRAP_USERS, response.data.users.data)\n commit(types.SET_TOTAL_USERS, response.data.users.total)\n commit(\n 'search/' + searchTypes.SET_USER_LISTS,\n response.data.users.data,\n { root: true }\n )\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const fetchUser = ({ commit, dispatch }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .get(`/api/v1/users/${id}`)\n .then((response) => {\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const addUser = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post('/api/v1/users', data)\n .then((response) => {\n commit(types.ADD_USER, response.data)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const updateUser = ({ commit, dispatch, state }, data) => {\n return new Promise((resolve, reject) => {\n window.axios\n .put(`/api/v1/users/${data.id}`, data)\n .then((response) => {\n if (response.data.success) {\n commit(types.UPDATE_USER, response.data)\n }\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteUser = ({ commit, dispatch, state }, user) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/users/delete`, {\n users: user,\n })\n .then((response) => {\n commit(types.DELETE_USER, user)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const deleteMultipleUsers = ({ commit, dispatch, state }, id) => {\n return new Promise((resolve, reject) => {\n window.axios\n .post(`/api/v1/users/delete`, { users: state.selectedUsers })\n .then((response) => {\n commit(types.DELETE_MULTIPLE_USERS, state.selectedUsers)\n resolve(response)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const setSelectAllState = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECT_ALL_STATE, data)\n}\n\nexport const selectAllUsers = ({ commit, dispatch, state }) => {\n if (state.selectedUsers.length === state.users.length) {\n commit(types.SET_SELECTED_USERS, [])\n commit(types.SET_SELECT_ALL_STATE, false)\n } else {\n let allUserIds = state.users.map((user) => user.id)\n commit(types.SET_SELECTED_USERS, allUserIds)\n commit(types.SET_SELECT_ALL_STATE, true)\n }\n}\n\nexport const selectedUser = ({ commit, dispatch, state }, data) => {\n commit(types.SET_SELECTED_USERS, data)\n if (state.selectedUsers.length === state.users.length) {\n commit(types.SET_SELECT_ALL_STATE, true)\n } else {\n commit(types.SET_SELECT_ALL_STATE, false)\n }\n}\n","export const users = (state) => state.users\nexport const selectAllField = (state) => state.selectAllField\nexport const selectedUsers = (state) => state.selectedUsers\nexport const totalUsers = (state) => state.totalUsers\n","import mutations from './mutations'\nimport * as actions from './actions'\nimport * as getters from './getters'\n\nconst initialState = {\n users: [],\n totalUsers: 0,\n selectAllField: false,\n selectedUsers: [],\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n getters: getters,\n\n actions: actions,\n\n mutations: mutations,\n}\n","export const BOOTSTRAP_USERS = 'BOOTSTRAP_USERS'\nexport const ADD_USER = 'ADD_USER'\nexport const UPDATE_USER = 'UPDATE_USER'\nexport const DELETE_USER = 'DELETE_USER'\nexport const DELETE_MULTIPLE_USERS = 'DELETE_MULTIPLE_USERS'\nexport const SET_SELECTED_USERS = 'SET_SELECTED_USERS'\nexport const SET_TOTAL_USERS = 'SET_TOTAL_USERS'\nexport const SET_SELECT_ALL_STATE = 'SET_SELECT_ALL_STATE'\n","import * as types from './mutation-types'\n\nexport default {\n [types.BOOTSTRAP_USERS](state, users) {\n state.users = users\n },\n\n [types.SET_TOTAL_USERS](state, totalUsers) {\n state.totalUsers = totalUsers\n },\n\n [types.ADD_USER](state, data) {\n state.users.push(data.user)\n },\n\n [types.UPDATE_USER](state, data) {\n let pos = state.users.findIndex((user) => user.id === data.user.id)\n\n state.users[pos] = data.user\n },\n\n [types.DELETE_USER](state, id) {\n let index = state.users.findIndex((user) => user.id === id[0])\n state.users.splice(index, 1)\n },\n\n [types.DELETE_MULTIPLE_USERS](state, selectedUsers) {\n selectedUsers.forEach((user) => {\n let index = state.users.findIndex((_user) => _user.id === user.id)\n state.users.splice(index, 1)\n })\n\n state.selectedUsers = []\n },\n\n [types.SET_SELECTED_USERS](state, data) {\n state.selectedUsers = data\n },\n\n [types.SET_SELECT_ALL_STATE](state, data) {\n state.selectAllField = data\n },\n}\n","export const UPDATE_APP_LOADING_STATUS = 'UPDATE_APP_LOADING_STATUS'\n\nexport const SET_LANGUAGES = 'SET_LANGUAGES'\n\nexport const SET_CURRENCIES = 'SET_CURRENCIES'\n\nexport const SET_DATE_FORMATS = 'SET_DATE_FORMATS'\n\nexport const SET_TIMEZONES = 'SET_TIMEZONES'\n\nexport const SET_FISCAL_YEARS = 'SET_FISCAL_YEARS'\n\nexport const SET_COUNTRIES = 'SET_COUNTRIES'\n\nexport const TOGGLE_SIDEBAR = 'TOGGLE_SIDEBAR'\n","import * as types from './mutation-types'\n\nexport default {\n [types.UPDATE_APP_LOADING_STATUS]: (state, data) => {\n state.isAppLoaded = data\n },\n\n [types.SET_LANGUAGES](state, languages) {\n state.languages = languages\n },\n\n [types.SET_CURRENCIES](state, currencies) {\n state.currencies = currencies\n },\n\n [types.SET_TIMEZONES](state, timeZones) {\n state.timeZones = timeZones\n },\n\n [types.SET_DATE_FORMATS](state, dateFormats) {\n state.dateFormats = dateFormats\n },\n\n [types.SET_FISCAL_YEARS](state, fiscalYears) {\n state.fiscalYears = fiscalYears\n },\n\n [types.SET_COUNTRIES](state, countries) {\n state.countries = countries\n },\n\n [types.TOGGLE_SIDEBAR](state) {\n state.isSidebarOpen = !state.isSidebarOpen\n },\n}\n","export default {\n name: null,\n phone: null,\n address_street_1: null,\n address_street_2: null,\n city: null,\n state: null,\n country_id: null,\n zip: null,\n type: null,\n}\n","export default {\n estimate_id: null,\n item_id: null,\n name: '',\n title: '',\n description: null,\n quantity: 1,\n price: 0,\n discount_type: 'fixed',\n discount_val: 0,\n discount: 0,\n total: 0,\n totalTax: 0,\n totalSimpleTax: 0,\n totalCompoundTax: 0,\n tax: 0,\n taxes: [],\n}\n","export default {\n invoice_id: null,\n item_id: null,\n name: '',\n title: '',\n description: null,\n quantity: 1,\n price: 0,\n discount_type: 'fixed',\n discount_val: 0,\n discount: 0,\n total: 0,\n totalTax: 0,\n totalSimpleTax: 0,\n totalCompoundTax: 0,\n tax: 0,\n taxes: [],\n}\n","export default {\n name: '',\n tax_type_id: 0,\n amount: null,\n percent: null,\n compound_tax: false,\n}\n","/*!\n * Chart.js v2.9.4\n * https://www.chartjs.org\n * (c) 2020 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) :\ntypeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) :\n(global = global || self, global.Chart = factory(global.moment));\n}(this, (function (moment) { 'use strict';\n\nmoment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nfunction getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}\n\nvar colorName = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\nvar conversions = createCommonjsModule(function (module) {\n/* MIT license */\n\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in colorName) {\n\tif (colorName.hasOwnProperty(key)) {\n\t\treverseKeywords[colorName[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in colorName) {\n\t\tif (colorName.hasOwnProperty(keyword)) {\n\t\t\tvar value = colorName[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn colorName[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n});\nvar conversions_1 = conversions.rgb;\nvar conversions_2 = conversions.hsl;\nvar conversions_3 = conversions.hsv;\nvar conversions_4 = conversions.hwb;\nvar conversions_5 = conversions.cmyk;\nvar conversions_6 = conversions.xyz;\nvar conversions_7 = conversions.lab;\nvar conversions_8 = conversions.lch;\nvar conversions_9 = conversions.hex;\nvar conversions_10 = conversions.keyword;\nvar conversions_11 = conversions.ansi16;\nvar conversions_12 = conversions.ansi256;\nvar conversions_13 = conversions.hcg;\nvar conversions_14 = conversions.apple;\nvar conversions_15 = conversions.gray;\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nvar route = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nvar colorConvert = convert;\n\nvar colorName$1 = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\n/* MIT license */\n\n\nvar colorString = {\n getRgba: getRgba,\n getHsla: getHsla,\n getRgb: getRgb,\n getHsl: getHsl,\n getHwb: getHwb,\n getAlpha: getAlpha,\n\n hexString: hexString,\n rgbString: rgbString,\n rgbaString: rgbaString,\n percentString: percentString,\n percentaString: percentaString,\n hslString: hslString,\n hslaString: hslaString,\n hwbString: hwbString,\n keyword: keyword\n};\n\nfunction getRgba(string) {\n if (!string) {\n return;\n }\n var abbr = /^#([a-fA-F0-9]{3,4})$/i,\n hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n keyword = /(\\w+)/;\n\n var rgb = [0, 0, 0],\n a = 1,\n match = string.match(abbr),\n hexAlpha = \"\";\n if (match) {\n match = match[1];\n hexAlpha = match[3];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i] + match[i], 16);\n }\n if (hexAlpha) {\n a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;\n }\n }\n else if (match = string.match(hex)) {\n hexAlpha = match[2];\n match = match[1];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n }\n if (hexAlpha) {\n a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;\n }\n }\n else if (match = string.match(rgba)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i + 1]);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(per)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(keyword)) {\n if (match[1] == \"transparent\") {\n return [0, 0, 0, 0];\n }\n rgb = colorName$1[match[1]];\n if (!rgb) {\n return;\n }\n }\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = scale(rgb[i], 0, 255);\n }\n if (!a && a != 0) {\n a = 1;\n }\n else {\n a = scale(a, 0, 1);\n }\n rgb[3] = a;\n return rgb;\n}\n\nfunction getHsla(string) {\n if (!string) {\n return;\n }\n var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hsl);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n s = scale(parseFloat(match[2]), 0, 100),\n l = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, s, l, a];\n }\n}\n\nfunction getHwb(string) {\n if (!string) {\n return;\n }\n var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hwb);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n w = scale(parseFloat(match[2]), 0, 100),\n b = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, w, b, a];\n }\n}\n\nfunction getRgb(string) {\n var rgba = getRgba(string);\n return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n var hsla = getHsla(string);\n return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n var vals = getRgba(string);\n if (vals) {\n return vals[3];\n }\n else if (vals = getHsla(string)) {\n return vals[3];\n }\n else if (vals = getHwb(string)) {\n return vals[3];\n }\n}\n\n// generators\nfunction hexString(rgba, a) {\n var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];\n return \"#\" + hexDouble(rgba[0]) \n + hexDouble(rgba[1])\n + hexDouble(rgba[2])\n + (\n (a >= 0 && a < 1)\n ? hexDouble(Math.round(a * 255))\n : \"\"\n );\n}\n\nfunction rgbString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return rgbaString(rgba, alpha);\n }\n return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n if (alpha === undefined) {\n alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n }\n return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return percentaString(rgba, alpha);\n }\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n\n return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n return hslaString(hsla, alpha);\n }\n return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n if (alpha === undefined) {\n alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n }\n return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n if (alpha === undefined) {\n alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n }\n return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n var str = num.toString(16).toUpperCase();\n return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorName$1) {\n reverseNames[colorName$1[name]] = name;\n}\n\n/* MIT license */\n\n\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = colorString.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = colorString.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = colorString.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn colorString.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn colorString.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn colorString.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn colorString.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn colorString.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn colorString.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn colorString.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn colorString.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = colorConvert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nvar chartjsColor = Color;\n\nfunction isValidKey(key) {\r\n\treturn ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\r\n}\r\n\r\n/**\r\n * @namespace Chart.helpers\r\n */\r\nvar helpers = {\r\n\t/**\r\n\t * An empty function that can be used, for example, for optional callback.\r\n\t */\r\n\tnoop: function() {},\r\n\r\n\t/**\r\n\t * Returns a unique id, sequentially generated from a global variable.\r\n\t * @returns {number}\r\n\t * @function\r\n\t */\r\n\tuid: (function() {\r\n\t\tvar id = 0;\r\n\t\treturn function() {\r\n\t\t\treturn id++;\r\n\t\t};\r\n\t}()),\r\n\r\n\t/**\r\n\t * Returns true if `value` is neither null nor undefined, else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisNullOrUndef: function(value) {\r\n\t\treturn value === null || typeof value === 'undefined';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an array (including typed arrays), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @function\r\n\t */\r\n\tisArray: function(value) {\r\n\t\tif (Array.isArray && Array.isArray(value)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar type = Object.prototype.toString.call(value);\r\n\t\tif (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an object (excluding null), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisObject: function(value) {\r\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is a finite number, else returns false\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t */\r\n\tisFinite: function(value) {\r\n\t\treturn (typeof value === 'number' || value instanceof Number) && isFinite(value);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns `value` if defined, else returns `defaultValue`.\r\n\t * @param {*} value - The value to return if defined.\r\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueOrDefault: function(value, defaultValue) {\r\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\r\n\t * @param {Array} value - The array to lookup for value at `index`.\r\n\t * @param {number} index - The index in `value` to lookup for value.\r\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\r\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\r\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\r\n\t * @param {function} fn - The function to call.\r\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @returns {*}\r\n\t */\r\n\tcallback: function(fn, args, thisArg) {\r\n\t\tif (fn && typeof fn.call === 'function') {\r\n\t\t\treturn fn.apply(thisArg, args);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Note(SB) for performance sake, this method should only be used when loopable type\r\n\t * is unknown or in none intensive code (not called often and small loopable). Else\r\n\t * it's preferable to use a regular for() loop and save extra function calls.\r\n\t * @param {object|Array} loopable - The object or array to be iterated.\r\n\t * @param {function} fn - The function to call for each item.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @param {boolean} [reverse] - If true, iterates backward on the loopable.\r\n\t */\r\n\teach: function(loopable, fn, thisArg, reverse) {\r\n\t\tvar i, len, keys;\r\n\t\tif (helpers.isArray(loopable)) {\r\n\t\t\tlen = loopable.length;\r\n\t\t\tif (reverse) {\r\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (helpers.isObject(loopable)) {\r\n\t\t\tkeys = Object.keys(loopable);\r\n\t\t\tlen = keys.length;\r\n\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\r\n\t * @see https://stackoverflow.com/a/14853974\r\n\t * @param {Array} a0 - The array to compare\r\n\t * @param {Array} a1 - The array to compare\r\n\t * @returns {boolean}\r\n\t */\r\n\tarrayEquals: function(a0, a1) {\r\n\t\tvar i, ilen, v0, v1;\r\n\r\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\r\n\t\t\tv0 = a0[i];\r\n\t\t\tv1 = a1[i];\r\n\r\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\r\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else if (v0 !== v1) {\r\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\r\n\t * @param {*} source - The value to clone.\r\n\t * @returns {*}\r\n\t */\r\n\tclone: function(source) {\r\n\t\tif (helpers.isArray(source)) {\r\n\t\t\treturn source.map(helpers.clone);\r\n\t\t}\r\n\r\n\t\tif (helpers.isObject(source)) {\r\n\t\t\tvar target = Object.create(source);\r\n\t\t\tvar keys = Object.keys(source);\r\n\t\t\tvar klen = keys.length;\r\n\t\t\tvar k = 0;\r\n\r\n\t\t\tfor (; k < klen; ++k) {\r\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\r\n\t\t\t}\r\n\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\treturn source;\r\n\t},\r\n\r\n\t/**\r\n\t * The default merger when Chart.helpers.merge is called without merger option.\r\n\t * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\r\n\t * @private\r\n\t */\r\n\t_merger: function(key, target, source, options) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.merge(tval, sval, options);\r\n\t\t} else {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Merges source[key] in target[key] only if target[key] is undefined.\r\n\t * @private\r\n\t */\r\n\t_mergerIf: function(key, target, source) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.mergeIf(tval, sval);\r\n\t\t} else if (!target.hasOwnProperty(key)) {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @param {object} [options] - Merging options:\r\n\t * @param {function} [options.merger] - The merge method (key, target, source, options)\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmerge: function(target, source, options) {\r\n\t\tvar sources = helpers.isArray(source) ? source : [source];\r\n\t\tvar ilen = sources.length;\r\n\t\tvar merge, i, keys, klen, k;\r\n\r\n\t\tif (!helpers.isObject(target)) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\toptions = options || {};\r\n\t\tmerge = options.merger || helpers._merger;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!helpers.isObject(source)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tkeys = Object.keys(source);\r\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\r\n\t\t\t\tmerge(keys[k], target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmergeIf: function(target, source) {\r\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\r\n\t},\r\n\r\n\t/**\r\n\t * Applies the contents of two or more objects together into the first object.\r\n\t * @param {object} target - The target object in which all objects are merged into.\r\n\t * @param {object} arg1 - Object containing additional properties to merge in target.\r\n\t * @param {object} argN - Additional objects containing properties to merge in target.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\textend: Object.assign || function(target) {\r\n\t\treturn helpers.merge(target, [].slice.call(arguments, 1), {\r\n\t\t\tmerger: function(key, dst, src) {\r\n\t\t\t\tdst[key] = src[key];\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * Basic javascript inheritance based on the model created in Backbone.js\r\n\t */\r\n\tinherits: function(extensions) {\r\n\t\tvar me = this;\r\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\r\n\t\t\treturn me.apply(this, arguments);\r\n\t\t};\r\n\r\n\t\tvar Surrogate = function() {\r\n\t\t\tthis.constructor = ChartElement;\r\n\t\t};\r\n\r\n\t\tSurrogate.prototype = me.prototype;\r\n\t\tChartElement.prototype = new Surrogate();\r\n\t\tChartElement.extend = helpers.inherits;\r\n\r\n\t\tif (extensions) {\r\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\r\n\t\t}\r\n\r\n\t\tChartElement.__super__ = me.prototype;\r\n\t\treturn ChartElement;\r\n\t},\r\n\r\n\t_deprecated: function(scope, value, previous, current) {\r\n\t\tif (value !== undefined) {\r\n\t\t\tconsole.warn(scope + ': \"' + previous +\r\n\t\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar helpers_core = helpers;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.callback instead.\r\n * @function Chart.helpers.callCallback\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.callCallback = helpers.callback;\r\n\r\n/**\r\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\r\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\r\n * @function Chart.helpers.indexOf\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.indexOf = function(array, item, fromIndex) {\r\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\r\n};\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\r\n * @function Chart.helpers.getValueOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueOrDefault = helpers.valueOrDefault;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\r\n * @function Chart.helpers.getValueAtIndexOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n/**\r\n * Easing functions adapted from Robert Penner's easing equations.\r\n * @namespace Chart.helpers.easingEffects\r\n * @see http://www.robertpenner.com/easing/\r\n */\r\nvar effects = {\r\n\tlinear: function(t) {\r\n\t\treturn t;\r\n\t},\r\n\r\n\teaseInQuad: function(t) {\r\n\t\treturn t * t;\r\n\t},\r\n\r\n\teaseOutQuad: function(t) {\r\n\t\treturn -t * (t - 2);\r\n\t},\r\n\r\n\teaseInOutQuad: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\r\n\t},\r\n\r\n\teaseInCubic: function(t) {\r\n\t\treturn t * t * t;\r\n\t},\r\n\r\n\teaseOutCubic: function(t) {\r\n\t\treturn (t = t - 1) * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutCubic: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\r\n\t},\r\n\r\n\teaseInQuart: function(t) {\r\n\t\treturn t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuart: function(t) {\r\n\t\treturn -((t = t - 1) * t * t * t - 1);\r\n\t},\r\n\r\n\teaseInOutQuart: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\r\n\t},\r\n\r\n\teaseInQuint: function(t) {\r\n\t\treturn t * t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuint: function(t) {\r\n\t\treturn (t = t - 1) * t * t * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutQuint: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\r\n\t},\r\n\r\n\teaseInSine: function(t) {\r\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\r\n\t},\r\n\r\n\teaseOutSine: function(t) {\r\n\t\treturn Math.sin(t * (Math.PI / 2));\r\n\t},\r\n\r\n\teaseInOutSine: function(t) {\r\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\r\n\t},\r\n\r\n\teaseInExpo: function(t) {\r\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\r\n\t},\r\n\r\n\teaseOutExpo: function(t) {\r\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\r\n\t},\r\n\r\n\teaseInOutExpo: function(t) {\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\r\n\t\t}\r\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\r\n\t},\r\n\r\n\teaseInCirc: function(t) {\r\n\t\tif (t >= 1) {\r\n\t\t\treturn t;\r\n\t\t}\r\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\r\n\t},\r\n\r\n\teaseOutCirc: function(t) {\r\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\r\n\t},\r\n\r\n\teaseInOutCirc: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\r\n\t\t}\r\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\r\n\t},\r\n\r\n\teaseInElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t},\r\n\r\n\teaseOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\r\n\t},\r\n\r\n\teaseInOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif ((t /= 0.5) === 2) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.45;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\tif (t < 1) {\r\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\r\n\t},\r\n\teaseInBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn t * t * ((s + 1) * t - s);\r\n\t},\r\n\r\n\teaseOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\r\n\t},\r\n\r\n\teaseInOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\r\n\t},\r\n\r\n\teaseInBounce: function(t) {\r\n\t\treturn 1 - effects.easeOutBounce(1 - t);\r\n\t},\r\n\r\n\teaseOutBounce: function(t) {\r\n\t\tif (t < (1 / 2.75)) {\r\n\t\t\treturn 7.5625 * t * t;\r\n\t\t}\r\n\t\tif (t < (2 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\r\n\t\t}\r\n\t\tif (t < (2.5 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\r\n\t\t}\r\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\r\n\t},\r\n\r\n\teaseInOutBounce: function(t) {\r\n\t\tif (t < 0.5) {\r\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\r\n\t\t}\r\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\r\n\t}\r\n};\r\n\r\nvar helpers_easing = {\r\n\teffects: effects\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\r\n * @function Chart.helpers.easingEffects\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.easingEffects = effects;\n\nvar PI = Math.PI;\r\nvar RAD_PER_DEG = PI / 180;\r\nvar DOUBLE_PI = PI * 2;\r\nvar HALF_PI = PI / 2;\r\nvar QUARTER_PI = PI / 4;\r\nvar TWO_THIRDS_PI = PI * 2 / 3;\r\n\r\n/**\r\n * @namespace Chart.helpers.canvas\r\n */\r\nvar exports$1 = {\r\n\t/**\r\n\t * Clears the entire canvas associated to the given `chart`.\r\n\t * @param {Chart} chart - The chart for which to clear the canvas.\r\n\t */\r\n\tclear: function(chart) {\r\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\r\n\t},\r\n\r\n\t/**\r\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\r\n\t * given size (width, height) and the same `radius` for all corners.\r\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\r\n\t * @param {number} x - The x axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} y - The y axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} width - The rectangle's width.\r\n\t * @param {number} height - The rectangle's height.\r\n\t * @param {number} radius - The rounded amount (in pixels) for the four corners.\r\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\r\n\t */\r\n\troundedRect: function(ctx, x, y, width, height, radius) {\r\n\t\tif (radius) {\r\n\t\t\tvar r = Math.min(radius, height / 2, width / 2);\r\n\t\t\tvar left = x + r;\r\n\t\t\tvar top = y + r;\r\n\t\t\tvar right = x + width - r;\r\n\t\t\tvar bottom = y + height - r;\r\n\r\n\t\t\tctx.moveTo(x, top);\r\n\t\t\tif (left < right && top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, -HALF_PI);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, 0);\r\n\t\t\t\tctx.arc(right, bottom, r, 0, HALF_PI);\r\n\t\t\t\tctx.arc(left, bottom, r, HALF_PI, PI);\r\n\t\t\t} else if (left < right) {\r\n\t\t\t\tctx.moveTo(left, y);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, HALF_PI);\r\n\t\t\t\tctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\r\n\t\t\t} else if (top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, 0);\r\n\t\t\t\tctx.arc(left, bottom, r, 0, PI);\r\n\t\t\t} else {\r\n\t\t\t\tctx.arc(left, top, r, -PI, PI);\r\n\t\t\t}\r\n\t\t\tctx.closePath();\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t} else {\r\n\t\t\tctx.rect(x, y, width, height);\r\n\t\t}\r\n\t},\r\n\r\n\tdrawPoint: function(ctx, style, radius, x, y, rotation) {\r\n\t\tvar type, xOffset, yOffset, size, cornerRadius;\r\n\t\tvar rad = (rotation || 0) * RAD_PER_DEG;\r\n\r\n\t\tif (style && typeof style === 'object') {\r\n\t\t\ttype = style.toString();\r\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.translate(x, y);\r\n\t\t\t\tctx.rotate(rad);\r\n\t\t\t\tctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\r\n\t\t\t\tctx.restore();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isNaN(radius) || radius <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\r\n\t\tswitch (style) {\r\n\t\t// Default includes circle\r\n\t\tdefault:\r\n\t\t\tctx.arc(x, y, radius, 0, DOUBLE_PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'triangle':\r\n\t\t\tctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rectRounded':\r\n\t\t\t// NOTE: the rounded rect implementation changed to use `arc` instead of\r\n\t\t\t// `quadraticCurveTo` since it generates better results when rect is\r\n\t\t\t// almost a circle. 0.516 (instead of 0.5) produces results with visually\r\n\t\t\t// closer proportion to the previous impl and it is inscribed in the\r\n\t\t\t// circle with `radius`. For more details, see the following PRs:\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5597\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5858\r\n\t\t\tcornerRadius = radius * 0.516;\r\n\t\t\tsize = radius - cornerRadius;\r\n\t\t\txOffset = Math.cos(rad + QUARTER_PI) * size;\r\n\t\t\tyOffset = Math.sin(rad + QUARTER_PI) * size;\r\n\t\t\tctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\r\n\t\t\tctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\r\n\t\t\tctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\r\n\t\t\tctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rect':\r\n\t\t\tif (!rotation) {\r\n\t\t\t\tsize = Math.SQRT1_2 * radius;\r\n\t\t\t\tctx.rect(x - size, y - size, 2 * size, 2 * size);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'rectRot':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'crossRot':\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'cross':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'star':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'dash':\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t\tctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tctx.fill();\r\n\t\tctx.stroke();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the point is inside the rectangle\r\n\t * @param {object} point - The point to test\r\n\t * @param {object} area - The rectangle\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\t_isPointInArea: function(point, area) {\r\n\t\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\r\n\t\treturn point.x > area.left - epsilon && point.x < area.right + epsilon &&\r\n\t\t\tpoint.y > area.top - epsilon && point.y < area.bottom + epsilon;\r\n\t},\r\n\r\n\tclipArea: function(ctx, area) {\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\r\n\t\tctx.clip();\r\n\t},\r\n\r\n\tunclipArea: function(ctx) {\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tlineTo: function(ctx, previous, target, flip) {\r\n\t\tvar stepped = target.steppedLine;\r\n\t\tif (stepped) {\r\n\t\t\tif (stepped === 'middle') {\r\n\t\t\t\tvar midpoint = (previous.x + target.x) / 2.0;\r\n\t\t\t\tctx.lineTo(midpoint, flip ? target.y : previous.y);\r\n\t\t\t\tctx.lineTo(midpoint, flip ? previous.y : target.y);\r\n\t\t\t} else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {\r\n\t\t\t\tctx.lineTo(previous.x, target.y);\r\n\t\t\t} else {\r\n\t\t\t\tctx.lineTo(target.x, previous.y);\r\n\t\t\t}\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!target.tension) {\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.bezierCurveTo(\r\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\r\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\r\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\r\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\r\n\t\t\ttarget.x,\r\n\t\t\ttarget.y);\r\n\t}\r\n};\r\n\r\nvar helpers_canvas = exports$1;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\r\n * @namespace Chart.helpers.clear\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.clear = exports$1.clear;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\r\n * @namespace Chart.helpers.drawRoundedRectangle\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.drawRoundedRectangle = function(ctx) {\r\n\tctx.beginPath();\r\n\texports$1.roundedRect.apply(exports$1, arguments);\r\n};\n\nvar defaults = {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_set: function(scope, values) {\r\n\t\treturn helpers_core.merge(this[scope] || (this[scope] = {}), values);\r\n\t}\r\n};\r\n\r\n// TODO(v3): remove 'global' from namespace. all default are global and\r\n// there's inconsistency around which options are under 'global'\r\ndefaults._set('global', {\r\n\tdefaultColor: 'rgba(0,0,0,0.1)',\r\n\tdefaultFontColor: '#666',\r\n\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\r\n\tdefaultFontSize: 12,\r\n\tdefaultFontStyle: 'normal',\r\n\tdefaultLineHeight: 1.2,\r\n\tshowLines: true\r\n});\r\n\r\nvar core_defaults = defaults;\n\nvar valueOrDefault = helpers_core.valueOrDefault;\r\n\r\n/**\r\n * Converts the given font object into a CSS font string.\r\n * @param {object} font - A font object.\r\n * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n * @private\r\n */\r\nfunction toFontString(font) {\r\n\tif (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (font.style ? font.style + ' ' : '')\r\n\t\t+ (font.weight ? font.weight + ' ' : '')\r\n\t\t+ font.size + 'px '\r\n\t\t+ font.family;\r\n}\r\n\r\n/**\r\n * @alias Chart.helpers.options\r\n * @namespace\r\n */\r\nvar helpers_options = {\r\n\t/**\r\n\t * Converts the given line height `value` in pixels for a specific font `size`.\r\n\t * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\r\n\t * @param {number} size - The font size (in pixels) used to resolve relative `value`.\r\n\t * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoLineHeight: function(value, size) {\r\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\r\n\t\tif (!matches || matches[1] === 'normal') {\r\n\t\t\treturn size * 1.2;\r\n\t\t}\r\n\r\n\t\tvalue = +matches[2];\r\n\r\n\t\tswitch (matches[3]) {\r\n\t\tcase 'px':\r\n\t\t\treturn value;\r\n\t\tcase '%':\r\n\t\t\tvalue /= 100;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn size * value;\r\n\t},\r\n\r\n\t/**\r\n\t * Converts the given value into a padding object with pre-computed width/height.\r\n\t * @param {number|object} value - If a number, set the value to all TRBL component,\r\n\t * else, if and object, use defined properties and sets undefined ones to 0.\r\n\t * @returns {object} The padding values (top, right, bottom, left, width, height)\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoPadding: function(value) {\r\n\t\tvar t, r, b, l;\r\n\r\n\t\tif (helpers_core.isObject(value)) {\r\n\t\t\tt = +value.top || 0;\r\n\t\t\tr = +value.right || 0;\r\n\t\t\tb = +value.bottom || 0;\r\n\t\t\tl = +value.left || 0;\r\n\t\t} else {\r\n\t\t\tt = r = b = l = +value || 0;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: t,\r\n\t\t\tright: r,\r\n\t\t\tbottom: b,\r\n\t\t\tleft: l,\r\n\t\t\theight: t + b,\r\n\t\t\twidth: l + r\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Parses font options and returns the font object.\r\n\t * @param {object} options - A object that contains font options to be parsed.\r\n\t * @return {object} The font object.\r\n\t * @todo Support font.* options and renamed to toFont().\r\n\t * @private\r\n\t */\r\n\t_parseFont: function(options) {\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\r\n\t\tvar font = {\r\n\t\t\tfamily: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\r\n\t\t\tlineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\r\n\t\t\tsize: size,\r\n\t\t\tstyle: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\r\n\t\t\tweight: null,\r\n\t\t\tstring: ''\r\n\t\t};\r\n\r\n\t\tfont.string = toFontString(font);\r\n\t\treturn font;\r\n\t},\r\n\r\n\t/**\r\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\r\n\t * @param {Array} inputs - An array of values, falling back to the last value.\r\n\t * @param {object} [context] - If defined and the current value is a function, the value\r\n\t * is called with `context` as first argument and the result becomes the new input.\r\n\t * @param {number} [index] - If defined and the current value is an array, the value\r\n\t * at `index` become the new input.\r\n\t * @param {object} [info] - object to return information about resolution in\r\n\t * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.\r\n\t * @since 2.7.0\r\n\t */\r\n\tresolve: function(inputs, context, index, info) {\r\n\t\tvar cacheable = true;\r\n\t\tvar i, ilen, value;\r\n\r\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\r\n\t\t\tvalue = inputs[i];\r\n\t\t\tif (value === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (context !== undefined && typeof value === 'function') {\r\n\t\t\t\tvalue = value(context);\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (index !== undefined && helpers_core.isArray(value)) {\r\n\t\t\t\tvalue = value[index];\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (value !== undefined) {\r\n\t\t\t\tif (info && !cacheable) {\r\n\t\t\t\t\tinfo.cacheable = false;\r\n\t\t\t\t}\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\n/**\r\n * @alias Chart.helpers.math\r\n * @namespace\r\n */\r\nvar exports$2 = {\r\n\t/**\r\n\t * Returns an array of factors sorted from 1 to sqrt(value)\r\n\t * @private\r\n\t */\r\n\t_factorize: function(value) {\r\n\t\tvar result = [];\r\n\t\tvar sqrt = Math.sqrt(value);\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 1; i < sqrt; i++) {\r\n\t\t\tif (value % i === 0) {\r\n\t\t\t\tresult.push(i);\r\n\t\t\t\tresult.push(value / i);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (sqrt === (sqrt | 0)) { // if value is a square number\r\n\t\t\tresult.push(sqrt);\r\n\t\t}\r\n\r\n\t\tresult.sort(function(a, b) {\r\n\t\t\treturn a - b;\r\n\t\t}).pop();\r\n\t\treturn result;\r\n\t},\r\n\r\n\tlog10: Math.log10 || function(x) {\r\n\t\tvar exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\r\n\t\t// Check for whole powers of 10,\r\n\t\t// which due to floating point rounding error should be corrected.\r\n\t\tvar powerOf10 = Math.round(exponent);\r\n\t\tvar isPowerOf10 = x === Math.pow(10, powerOf10);\r\n\r\n\t\treturn isPowerOf10 ? powerOf10 : exponent;\r\n\t}\r\n};\r\n\r\nvar helpers_math = exports$2;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.math.log10 instead.\r\n * @namespace Chart.helpers.log10\r\n * @deprecated since version 2.9.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.log10 = exports$2.log10;\n\nvar getRtlAdapter = function(rectX, width) {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn rectX + rectX + width - x;\r\n\t\t},\r\n\t\tsetWidth: function(w) {\r\n\t\t\twidth = w;\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\tif (align === 'center') {\r\n\t\t\t\treturn align;\r\n\t\t\t}\r\n\t\t\treturn align === 'right' ? 'left' : 'right';\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x - value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, itemWidth) {\r\n\t\t\treturn x - itemWidth;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getLtrAdapter = function() {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn x;\r\n\t\t},\r\n\t\tsetWidth: function(w) { // eslint-disable-line no-unused-vars\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\treturn align;\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x + value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, _itemWidth) { // eslint-disable-line no-unused-vars\r\n\t\t\treturn x;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getAdapter = function(rtl, rectX, width) {\r\n\treturn rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();\r\n};\r\n\r\nvar overrideTextDirection = function(ctx, direction) {\r\n\tvar style, original;\r\n\tif (direction === 'ltr' || direction === 'rtl') {\r\n\t\tstyle = ctx.canvas.style;\r\n\t\toriginal = [\r\n\t\t\tstyle.getPropertyValue('direction'),\r\n\t\t\tstyle.getPropertyPriority('direction'),\r\n\t\t];\r\n\r\n\t\tstyle.setProperty('direction', direction, 'important');\r\n\t\tctx.prevTextDirection = original;\r\n\t}\r\n};\r\n\r\nvar restoreTextDirection = function(ctx) {\r\n\tvar original = ctx.prevTextDirection;\r\n\tif (original !== undefined) {\r\n\t\tdelete ctx.prevTextDirection;\r\n\t\tctx.canvas.style.setProperty('direction', original[0], original[1]);\r\n\t}\r\n};\r\n\r\nvar helpers_rtl = {\r\n\tgetRtlAdapter: getAdapter,\r\n\toverrideTextDirection: overrideTextDirection,\r\n\trestoreTextDirection: restoreTextDirection,\r\n};\n\nvar helpers$1 = helpers_core;\r\nvar easing = helpers_easing;\r\nvar canvas = helpers_canvas;\r\nvar options = helpers_options;\r\nvar math = helpers_math;\r\nvar rtl = helpers_rtl;\nhelpers$1.easing = easing;\nhelpers$1.canvas = canvas;\nhelpers$1.options = options;\nhelpers$1.math = math;\nhelpers$1.rtl = rtl;\n\nfunction interpolate(start, view, model, ease) {\r\n\tvar keys = Object.keys(model);\r\n\tvar i, ilen, key, actual, origin, target, type, c0, c1;\r\n\r\n\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\tkey = keys[i];\r\n\r\n\t\ttarget = model[key];\r\n\r\n\t\t// if a value is added to the model after pivot() has been called, the view\r\n\t\t// doesn't contain it, so let's initialize the view to the target value.\r\n\t\tif (!view.hasOwnProperty(key)) {\r\n\t\t\tview[key] = target;\r\n\t\t}\r\n\r\n\t\tactual = view[key];\r\n\r\n\t\tif (actual === target || key[0] === '_') {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tif (!start.hasOwnProperty(key)) {\r\n\t\t\tstart[key] = actual;\r\n\t\t}\r\n\r\n\t\torigin = start[key];\r\n\r\n\t\ttype = typeof target;\r\n\r\n\t\tif (type === typeof origin) {\r\n\t\t\tif (type === 'string') {\r\n\t\t\t\tc0 = chartjsColor(origin);\r\n\t\t\t\tif (c0.valid) {\r\n\t\t\t\t\tc1 = chartjsColor(target);\r\n\t\t\t\t\tif (c1.valid) {\r\n\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\r\n\t\t\t\tview[key] = origin + (target - origin) * ease;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tview[key] = target;\r\n\t}\r\n}\r\n\r\nvar Element = function(configuration) {\r\n\thelpers$1.extend(this, configuration);\r\n\tthis.initialize.apply(this, arguments);\r\n};\r\n\r\nhelpers$1.extend(Element.prototype, {\r\n\t_type: undefined,\r\n\r\n\tinitialize: function() {\r\n\t\tthis.hidden = false;\r\n\t},\r\n\r\n\tpivot: function() {\r\n\t\tvar me = this;\r\n\t\tif (!me._view) {\r\n\t\t\tme._view = helpers$1.extend({}, me._model);\r\n\t\t}\r\n\t\tme._start = {};\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttransition: function(ease) {\r\n\t\tvar me = this;\r\n\t\tvar model = me._model;\r\n\t\tvar start = me._start;\r\n\t\tvar view = me._view;\r\n\r\n\t\t// No animation -> No Transition\r\n\t\tif (!model || ease === 1) {\r\n\t\t\tme._view = helpers$1.extend({}, model);\r\n\t\t\tme._start = null;\r\n\t\t\treturn me;\r\n\t\t}\r\n\r\n\t\tif (!view) {\r\n\t\t\tview = me._view = {};\r\n\t\t}\r\n\r\n\t\tif (!start) {\r\n\t\t\tstart = me._start = {};\r\n\t\t}\r\n\r\n\t\tinterpolate(start, view, model, ease);\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\treturn {\r\n\t\t\tx: this._model.x,\r\n\t\t\ty: this._model.y\r\n\t\t};\r\n\t},\r\n\r\n\thasValue: function() {\r\n\t\treturn helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\r\n\t}\r\n});\r\n\r\nElement.extend = helpers$1.inherits;\r\n\r\nvar core_element = Element;\n\nvar exports$3 = core_element.extend({\r\n\tchart: null, // the animation associated chart instance\r\n\tcurrentStep: 0, // the current animation step\r\n\tnumSteps: 60, // default number of steps\r\n\teasing: '', // the easing to use for this animation\r\n\trender: null, // render function used by the animation service\r\n\r\n\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\r\n\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\r\n});\r\n\r\nvar core_animation = exports$3;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation instead\r\n * @prop Chart.Animation#animationObject\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'animationObject', {\r\n\tget: function() {\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation#chart instead\r\n * @prop Chart.Animation#chartInstance\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'chartInstance', {\r\n\tget: function() {\r\n\t\treturn this.chart;\r\n\t},\r\n\tset: function(value) {\r\n\t\tthis.chart = value;\r\n\t}\r\n});\n\ncore_defaults._set('global', {\r\n\tanimation: {\r\n\t\tduration: 1000,\r\n\t\teasing: 'easeOutQuart',\r\n\t\tonProgress: helpers$1.noop,\r\n\t\tonComplete: helpers$1.noop\r\n\t}\r\n});\r\n\r\nvar core_animations = {\r\n\tanimations: [],\r\n\trequest: null,\r\n\r\n\t/**\r\n\t * @param {Chart} chart - The chart to animate.\r\n\t * @param {Chart.Animation} animation - The animation that we will animate.\r\n\t * @param {number} duration - The animation duration in ms.\r\n\t * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\r\n\t */\r\n\taddAnimation: function(chart, animation, duration, lazy) {\r\n\t\tvar animations = this.animations;\r\n\t\tvar i, ilen;\r\n\r\n\t\tanimation.chart = chart;\r\n\t\tanimation.startTime = Date.now();\r\n\t\tanimation.duration = duration;\r\n\r\n\t\tif (!lazy) {\r\n\t\t\tchart.animating = true;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\r\n\t\t\tif (animations[i].chart === chart) {\r\n\t\t\t\tanimations[i] = animation;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tanimations.push(animation);\r\n\r\n\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\r\n\t\tif (animations.length === 1) {\r\n\t\t\tthis.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\tcancelAnimation: function(chart) {\r\n\t\tvar index = helpers$1.findIndex(this.animations, function(animation) {\r\n\t\t\treturn animation.chart === chart;\r\n\t\t});\r\n\r\n\t\tif (index !== -1) {\r\n\t\t\tthis.animations.splice(index, 1);\r\n\t\t\tchart.animating = false;\r\n\t\t}\r\n\t},\r\n\r\n\trequestAnimationFrame: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.request === null) {\r\n\t\t\t// Skip animation frame requests until the active one is executed.\r\n\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\r\n\t\t\t// and 'mouseout' events will trigger multiple renders.\r\n\t\t\tme.request = helpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tme.request = null;\r\n\t\t\t\tme.startDigest();\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tstartDigest: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tme.advance();\r\n\r\n\t\t// Do we have more stuff to animate?\r\n\t\tif (me.animations.length > 0) {\r\n\t\t\tme.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tadvance: function() {\r\n\t\tvar animations = this.animations;\r\n\t\tvar animation, chart, numSteps, nextStep;\r\n\t\tvar i = 0;\r\n\r\n\t\t// 1 animation per chart, so we are looping charts here\r\n\t\twhile (i < animations.length) {\r\n\t\t\tanimation = animations[i];\r\n\t\t\tchart = animation.chart;\r\n\t\t\tnumSteps = animation.numSteps;\r\n\r\n\t\t\t// Make sure that currentStep starts at 1\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/6104\r\n\t\t\tnextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\r\n\t\t\tanimation.currentStep = Math.min(nextStep, numSteps);\r\n\r\n\t\t\thelpers$1.callback(animation.render, [chart, animation], chart);\r\n\t\t\thelpers$1.callback(animation.onAnimationProgress, [animation], chart);\r\n\r\n\t\t\tif (animation.currentStep >= numSteps) {\r\n\t\t\t\thelpers$1.callback(animation.onAnimationComplete, [animation], chart);\r\n\t\t\t\tchart.animating = false;\r\n\t\t\t\tanimations.splice(i, 1);\r\n\t\t\t} else {\r\n\t\t\t\t++i;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar resolve = helpers$1.options.resolve;\r\n\r\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\r\n\r\n/**\r\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\r\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\r\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\r\n */\r\nfunction listenArrayEvents(array, listener) {\r\n\tif (array._chartjs) {\r\n\t\tarray._chartjs.listeners.push(listener);\r\n\t\treturn;\r\n\t}\r\n\r\n\tObject.defineProperty(array, '_chartjs', {\r\n\t\tconfigurable: true,\r\n\t\tenumerable: false,\r\n\t\tvalue: {\r\n\t\t\tlisteners: [listener]\r\n\t\t}\r\n\t});\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\r\n\t\tvar base = array[key];\r\n\r\n\t\tObject.defineProperty(array, key, {\r\n\t\t\tconfigurable: true,\r\n\t\t\tenumerable: false,\r\n\t\t\tvalue: function() {\r\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\t\t\tvar res = base.apply(this, args);\r\n\r\n\t\t\t\thelpers$1.each(array._chartjs.listeners, function(object) {\r\n\t\t\t\t\tif (typeof object[method] === 'function') {\r\n\t\t\t\t\t\tobject[method].apply(object, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Removes the given array event listener and cleanup extra attached properties (such as\r\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\r\n */\r\nfunction unlistenArrayEvents(array, listener) {\r\n\tvar stub = array._chartjs;\r\n\tif (!stub) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar listeners = stub.listeners;\r\n\tvar index = listeners.indexOf(listener);\r\n\tif (index !== -1) {\r\n\t\tlisteners.splice(index, 1);\r\n\t}\r\n\r\n\tif (listeners.length > 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tdelete array[key];\r\n\t});\r\n\r\n\tdelete array._chartjs;\r\n}\r\n\r\n// Base class for all dataset controllers (line, bar, etc)\r\nvar DatasetController = function(chart, datasetIndex) {\r\n\tthis.initialize(chart, datasetIndex);\r\n};\r\n\r\nhelpers$1.extend(DatasetController.prototype, {\r\n\r\n\t/**\r\n\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdatasetElementType: null,\r\n\r\n\t/**\r\n\t * Element type used to generate a meta data (e.g. Chart.element.Point).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdataElementType: null,\r\n\r\n\t/**\r\n\t * Dataset element option keys to be resolved in _resolveDatasetElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth'\r\n\t],\r\n\r\n\t/**\r\n\t * Data element option keys to be resolved in _resolveDataElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'pointStyle'\r\n\t],\r\n\r\n\tinitialize: function(chart, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tme.chart = chart;\r\n\t\tme.index = datasetIndex;\r\n\t\tme.linkScales();\r\n\t\tme.addElements();\r\n\t\tme._type = me.getMeta().type;\r\n\t},\r\n\r\n\tupdateIndex: function(datasetIndex) {\r\n\t\tthis.index = datasetIndex;\r\n\t},\r\n\r\n\tlinkScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar chart = me.chart;\r\n\t\tvar scales = chart.scales;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scalesOpts = chart.options.scales;\r\n\r\n\t\tif (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {\r\n\t\t\tmeta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;\r\n\t\t}\r\n\t\tif (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {\r\n\t\t\tmeta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;\r\n\t\t}\r\n\t},\r\n\r\n\tgetDataset: function() {\r\n\t\treturn this.chart.data.datasets[this.index];\r\n\t},\r\n\r\n\tgetMeta: function() {\r\n\t\treturn this.chart.getDatasetMeta(this.index);\r\n\t},\r\n\r\n\tgetScaleForId: function(scaleID) {\r\n\t\treturn this.chart.scales[scaleID];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScale: function() {\r\n\t\treturn this.getScaleForId(this._getValueScaleId());\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScale: function() {\r\n\t\treturn this.getScaleForId(this._getIndexScaleId());\r\n\t},\r\n\r\n\treset: function() {\r\n\t\tthis._update(true);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroy: function() {\r\n\t\tif (this._data) {\r\n\t\t\tunlistenArrayEvents(this._data, this);\r\n\t\t}\r\n\t},\r\n\r\n\tcreateMetaDataset: function() {\r\n\t\tvar me = this;\r\n\t\tvar type = me.datasetElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index\r\n\t\t});\r\n\t},\r\n\r\n\tcreateMetaData: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar type = me.dataElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index\r\n\t\t});\r\n\t},\r\n\r\n\taddElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data || [];\r\n\t\tvar metaData = meta.data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\r\n\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\r\n\t\t}\r\n\r\n\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\r\n\t},\r\n\r\n\taddElementAndReset: function(index) {\r\n\t\tvar element = this.createMetaData(index);\r\n\t\tthis.getMeta().data.splice(index, 0, element);\r\n\t\tthis.updateElement(element, index, true);\r\n\t},\r\n\r\n\tbuildOrUpdateElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar data = dataset.data || (dataset.data = []);\r\n\r\n\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\r\n\t\t// real-time charts), we need to monitor these data modifications and synchronize\r\n\t\t// the internal meta data accordingly.\r\n\t\tif (me._data !== data) {\r\n\t\t\tif (me._data) {\r\n\t\t\t\t// This case happens when the user replaced the data array instance.\r\n\t\t\t\tunlistenArrayEvents(me._data, me);\r\n\t\t\t}\r\n\r\n\t\t\tif (data && Object.isExtensible(data)) {\r\n\t\t\t\tlistenArrayEvents(data, me);\r\n\t\t\t}\r\n\t\t\tme._data = data;\r\n\t\t}\r\n\r\n\t\t// Re-sync meta data in case the user replaced the data array or if we missed\r\n\t\t// any updates and so make sure that we handle number of datapoints changing.\r\n\t\tme.resyncElements();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the merged user-supplied and default dataset-level options\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tme._config = helpers$1.merge(Object.create(null), [\r\n\t\t\tme.chart.options.datasets[me._type],\r\n\t\t\tme.getDataset(),\r\n\t\t], {\r\n\t\t\tmerger: function(key, target, source) {\r\n\t\t\t\tif (key !== '_meta' && key !== 'data') {\r\n\t\t\t\t\thelpers$1._merger(key, target, source);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_update: function(reset) {\r\n\t\tvar me = this;\r\n\t\tme._configure();\r\n\t\tme._cachedDataOpts = null;\r\n\t\tme.update(reset);\r\n\t},\r\n\r\n\tupdate: helpers$1.noop,\r\n\r\n\ttransition: function(easingValue) {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].transition(easingValue);\r\n\t\t}\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.transition(easingValue);\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.draw();\r\n\t\t}\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].draw();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a set of predefined style properties that should be used to represent the dataset\r\n\t * or the data if the index is specified\r\n\t * @param {number} index - data index\r\n\t * @return {IStyleInterface} style object\r\n\t */\r\n\tgetStyle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = meta.dataset;\r\n\t\tvar style;\r\n\r\n\t\tme._configure();\r\n\t\tif (dataset && index === undefined) {\r\n\t\t\tstyle = me._resolveDatasetElementOptions(dataset || {});\r\n\t\t} else {\r\n\t\t\tindex = index || 0;\r\n\t\t\tstyle = me._resolveDataElementOptions(meta.data[index] || {}, index);\r\n\t\t}\r\n\r\n\t\tif (style.fill === false || style.fill === null) {\r\n\t\t\tstyle.backgroundColor = style.borderColor;\r\n\t\t}\r\n\r\n\t\treturn style;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element, hover) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = chart.options.elements[me.datasetElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._datasetElementOptions;\r\n\t\tvar values = {};\r\n\t\tvar i, ilen, key, readKey;\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index,\r\n\t\t\thover: hover\r\n\t\t};\r\n\r\n\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\tkey = elementOptions[i];\r\n\t\t\treadKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;\r\n\t\t\tvalues[key] = resolve([\r\n\t\t\t\tcustom[readKey],\r\n\t\t\t\tdatasetOpts[readKey],\r\n\t\t\t\toptions[readKey]\r\n\t\t\t], context);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(element, index) {\r\n\t\tvar me = this;\r\n\t\tvar custom = element && element.custom;\r\n\t\tvar cached = me._cachedDataOpts;\r\n\t\tif (cached && !custom) {\r\n\t\t\treturn cached;\r\n\t\t}\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar options = chart.options.elements[me.dataElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._dataElementOptions;\r\n\t\tvar values = {};\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// `resolve` sets cacheable to `false` if any option is indexed or scripted\r\n\t\tvar info = {cacheable: !custom};\r\n\r\n\t\tvar keys, i, ilen, key;\r\n\r\n\t\tcustom = custom || {};\r\n\r\n\t\tif (helpers$1.isArray(elementOptions)) {\r\n\t\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\t\tkey = elementOptions[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tkeys = Object.keys(elementOptions);\r\n\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\t\tkey = keys[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[elementOptions[key]],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (info.cacheable) {\r\n\t\t\tme._cachedDataOpts = Object.freeze(values);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tremoveHoverStyle: function(element) {\r\n\t\thelpers$1.merge(element._model, element.$previousStyle || {});\r\n\t\tdelete element.$previousStyle;\r\n\t},\r\n\r\n\tsetHoverStyle: function(element) {\r\n\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\r\n\t\tvar index = element._index;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar model = element._model;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\telement.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\r\n\t\tmodel.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\r\n\t\tmodel.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_removeDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\r\n\t\tif (element) {\r\n\t\t\tthis.removeHoverStyle(element);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_setDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\t\tvar prev = {};\r\n\t\tvar i, ilen, key, keys, hoverOptions, model;\r\n\r\n\t\tif (!element) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmodel = element._model;\r\n\t\thoverOptions = this._resolveDatasetElementOptions(element, true);\r\n\r\n\t\tkeys = Object.keys(hoverOptions);\r\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\tkey = keys[i];\r\n\t\t\tprev[key] = model[key];\r\n\t\t\tmodel[key] = hoverOptions[key];\r\n\t\t}\r\n\r\n\t\telement.$previousStyle = prev;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tresyncElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data;\r\n\t\tvar numMeta = meta.data.length;\r\n\t\tvar numData = data.length;\r\n\r\n\t\tif (numData < numMeta) {\r\n\t\t\tmeta.data.splice(numData, numMeta - numData);\r\n\t\t} else if (numData > numMeta) {\r\n\t\t\tme.insertElements(numMeta, numData - numMeta);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinsertElements: function(start, count) {\r\n\t\tfor (var i = 0; i < count; ++i) {\r\n\t\t\tthis.addElementAndReset(start + i);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPush: function() {\r\n\t\tvar count = arguments.length;\r\n\t\tthis.insertElements(this.getDataset().data.length - count, count);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPop: function() {\r\n\t\tthis.getMeta().data.pop();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataShift: function() {\r\n\t\tthis.getMeta().data.shift();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataSplice: function(start, count) {\r\n\t\tthis.getMeta().data.splice(start, count);\r\n\t\tthis.insertElements(start, arguments.length - 2);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataUnshift: function() {\r\n\t\tthis.insertElements(0, arguments.length);\r\n\t}\r\n});\r\n\r\nDatasetController.extend = helpers$1.inherits;\r\n\r\nvar core_datasetController = DatasetController;\n\nvar TAU = Math.PI * 2;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tarc: {\r\n\t\t\tbackgroundColor: core_defaults.global.defaultColor,\r\n\t\t\tborderColor: '#fff',\r\n\t\t\tborderWidth: 2,\r\n\t\t\tborderAlign: 'center'\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction clipArc(ctx, arc) {\r\n\tvar startAngle = arc.startAngle;\r\n\tvar endAngle = arc.endAngle;\r\n\tvar pixelMargin = arc.pixelMargin;\r\n\tvar angleMargin = pixelMargin / arc.outerRadius;\r\n\tvar x = arc.x;\r\n\tvar y = arc.y;\r\n\r\n\t// Draw an inner border by cliping the arc and drawing a double-width border\r\n\t// Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\r\n\tctx.beginPath();\r\n\tctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);\r\n\tif (arc.innerRadius > pixelMargin) {\r\n\t\tangleMargin = pixelMargin / arc.innerRadius;\r\n\t\tctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);\r\n\t} else {\r\n\t\tctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);\r\n\t}\r\n\tctx.closePath();\r\n\tctx.clip();\r\n}\r\n\r\nfunction drawFullCircleBorders(ctx, vm, arc, inner) {\r\n\tvar endAngle = arc.endAngle;\r\n\tvar i;\r\n\r\n\tif (inner) {\r\n\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\tclipArc(ctx, arc);\r\n\t\tarc.endAngle = endAngle;\r\n\t\tif (arc.endAngle === arc.startAngle && arc.fullCircles) {\r\n\t\t\tarc.endAngle += TAU;\r\n\t\t\tarc.fullCircles--;\r\n\t\t}\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n}\r\n\r\nfunction drawBorder(ctx, vm, arc) {\r\n\tvar inner = vm.borderAlign === 'inner';\r\n\r\n\tif (inner) {\r\n\t\tctx.lineWidth = vm.borderWidth * 2;\r\n\t\tctx.lineJoin = 'round';\r\n\t} else {\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tctx.lineJoin = 'bevel';\r\n\t}\r\n\r\n\tif (arc.fullCircles) {\r\n\t\tdrawFullCircleBorders(ctx, vm, arc, inner);\r\n\t}\r\n\r\n\tif (inner) {\r\n\t\tclipArc(ctx, arc);\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n}\r\n\r\nvar element_arc = core_element.extend({\r\n\t_type: 'arc',\r\n\r\n\tinLabelRange: function(mouseX) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tinRange: function(chartX, chartY) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\tvar pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});\r\n\t\t\tvar angle = pointRelativePosition.angle;\r\n\t\t\tvar distance = pointRelativePosition.distance;\r\n\r\n\t\t\t// Sanitise angle range\r\n\t\t\tvar startAngle = vm.startAngle;\r\n\t\t\tvar endAngle = vm.endAngle;\r\n\t\t\twhile (endAngle < startAngle) {\r\n\t\t\t\tendAngle += TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle > endAngle) {\r\n\t\t\t\tangle -= TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle < startAngle) {\r\n\t\t\t\tangle += TAU;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if within the range of the open/close angle\r\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\r\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\r\n\r\n\t\t\treturn (betweenAngles && withinRadius);\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\r\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\r\n\t\treturn {\r\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\r\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\r\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\r\n\r\n\t\treturn {\r\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\r\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;\r\n\t\tvar arc = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tinnerRadius: vm.innerRadius,\r\n\t\t\touterRadius: Math.max(vm.outerRadius - pixelMargin, 0),\r\n\t\t\tpixelMargin: pixelMargin,\r\n\t\t\tstartAngle: vm.startAngle,\r\n\t\t\tendAngle: vm.endAngle,\r\n\t\t\tfullCircles: Math.floor(vm.circumference / TAU)\r\n\t\t};\r\n\t\tvar i;\r\n\r\n\t\tctx.save();\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\r\n\t\tif (arc.fullCircles) {\r\n\t\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\t\tctx.closePath();\r\n\t\t\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\t\t\tctx.fill();\r\n\t\t\t}\r\n\t\t\tarc.endAngle = arc.startAngle + vm.circumference % TAU;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\tctx.closePath();\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth) {\r\n\t\t\tdrawBorder(ctx, vm, arc);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$1 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tline: {\r\n\t\t\ttension: 0.4,\r\n\t\t\tbackgroundColor: defaultColor,\r\n\t\t\tborderWidth: 3,\r\n\t\t\tborderColor: defaultColor,\r\n\t\t\tborderCapStyle: 'butt',\r\n\t\t\tborderDash: [],\r\n\t\t\tborderDashOffset: 0.0,\r\n\t\t\tborderJoinStyle: 'miter',\r\n\t\t\tcapBezierPoints: true,\r\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar element_line = core_element.extend({\r\n\t_type: 'line',\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar vm = me._view;\r\n\t\tvar ctx = me._chart.ctx;\r\n\t\tvar spanGaps = vm.spanGaps;\r\n\t\tvar points = me._children.slice(); // clone array\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\r\n\t\tvar lastDrawnIndex = -1;\r\n\t\tvar closePath = me._loop;\r\n\t\tvar index, previous, currentVM;\r\n\r\n\t\tif (!points.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (me._loop) {\r\n\t\t\tfor (index = 0; index < points.length; ++index) {\r\n\t\t\t\tprevious = helpers$1.previousItem(points, index);\r\n\t\t\t\t// If the line has an open path, shift the point array\r\n\t\t\t\tif (!points[index]._view.skip && previous._view.skip) {\r\n\t\t\t\t\tpoints = points.slice(index).concat(points.slice(0, index));\r\n\t\t\t\t\tclosePath = spanGaps;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// If the line has a close path, add the first point again\r\n\t\t\tif (closePath) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\r\n\t\t// Stroke Line Options\r\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\r\n\r\n\t\t// IE 9 and 10 do not support line dash\r\n\t\tif (ctx.setLineDash) {\r\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\r\n\t\t}\r\n\r\n\t\tctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\r\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\r\n\t\tctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\r\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\r\n\r\n\t\t// Stroke Line\r\n\t\tctx.beginPath();\r\n\r\n\t\t// First point moves to it's starting position no matter what\r\n\t\tcurrentVM = points[0]._view;\r\n\t\tif (!currentVM.skip) {\r\n\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\tlastDrawnIndex = 0;\r\n\t\t}\r\n\r\n\t\tfor (index = 1; index < points.length; ++index) {\r\n\t\t\tcurrentVM = points[index]._view;\r\n\t\t\tprevious = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];\r\n\r\n\t\t\tif (!currentVM.skip) {\r\n\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\r\n\t\t\t\t\t// There was a gap and this is the first point after the gap\r\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Line to next point\r\n\t\t\t\t\thelpers$1.canvas.lineTo(ctx, previous._view, currentVM);\r\n\t\t\t\t}\r\n\t\t\t\tlastDrawnIndex = index;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (closePath) {\r\n\t\t\tctx.closePath();\r\n\t\t}\r\n\r\n\t\tctx.stroke();\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$2 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor$1 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tpoint: {\r\n\t\t\tradius: 3,\r\n\t\t\tpointStyle: 'circle',\r\n\t\t\tbackgroundColor: defaultColor$1,\r\n\t\t\tborderColor: defaultColor$1,\r\n\t\t\tborderWidth: 1,\r\n\t\t\t// Hover\r\n\t\t\thitRadius: 1,\r\n\t\t\thoverRadius: 4,\r\n\t\t\thoverBorderWidth: 1\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction xRange(mouseX) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nfunction yRange(mouseY) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nvar element_point = core_element.extend({\r\n\t_type: 'point',\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\r\n\t},\r\n\r\n\tinLabelRange: xRange,\r\n\tinXRange: xRange,\r\n\tinYRange: yRange,\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tpadding: vm.radius + vm.borderWidth\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar vm = this._view;\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar pointStyle = vm.pointStyle;\r\n\t\tvar rotation = vm.rotation;\r\n\t\tvar radius = vm.radius;\r\n\t\tvar x = vm.x;\r\n\t\tvar y = vm.y;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\r\n\r\n\t\tif (vm.skip) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Clipping for Points.\r\n\t\tif (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\r\n\t\t\tctx.strokeStyle = vm.borderColor || defaultColor;\r\n\t\t\tctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\r\n\t\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\r\n\t\t\thelpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\r\n\t\t}\r\n\t}\r\n});\n\nvar defaultColor$2 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tbackgroundColor: defaultColor$2,\r\n\t\t\tborderColor: defaultColor$2,\r\n\t\t\tborderSkipped: 'bottom',\r\n\t\t\tborderWidth: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction isVertical(vm) {\r\n\treturn vm && vm.width !== undefined;\r\n}\r\n\r\n/**\r\n * Helper function to get the bounds of the bar regardless of the orientation\r\n * @param bar {Chart.Element.Rectangle} the bar\r\n * @return {Bounds} bounds of the bar\r\n * @private\r\n */\r\nfunction getBarBounds(vm) {\r\n\tvar x1, x2, y1, y2, half;\r\n\r\n\tif (isVertical(vm)) {\r\n\t\thalf = vm.width / 2;\r\n\t\tx1 = vm.x - half;\r\n\t\tx2 = vm.x + half;\r\n\t\ty1 = Math.min(vm.y, vm.base);\r\n\t\ty2 = Math.max(vm.y, vm.base);\r\n\t} else {\r\n\t\thalf = vm.height / 2;\r\n\t\tx1 = Math.min(vm.x, vm.base);\r\n\t\tx2 = Math.max(vm.x, vm.base);\r\n\t\ty1 = vm.y - half;\r\n\t\ty2 = vm.y + half;\r\n\t}\r\n\r\n\treturn {\r\n\t\tleft: x1,\r\n\t\ttop: y1,\r\n\t\tright: x2,\r\n\t\tbottom: y2\r\n\t};\r\n}\r\n\r\nfunction swap(orig, v1, v2) {\r\n\treturn orig === v1 ? v2 : orig === v2 ? v1 : orig;\r\n}\r\n\r\nfunction parseBorderSkipped(vm) {\r\n\tvar edge = vm.borderSkipped;\r\n\tvar res = {};\r\n\r\n\tif (!edge) {\r\n\t\treturn res;\r\n\t}\r\n\r\n\tif (vm.horizontal) {\r\n\t\tif (vm.base > vm.x) {\r\n\t\t\tedge = swap(edge, 'left', 'right');\r\n\t\t}\r\n\t} else if (vm.base < vm.y) {\r\n\t\tedge = swap(edge, 'bottom', 'top');\r\n\t}\r\n\r\n\tres[edge] = true;\r\n\treturn res;\r\n}\r\n\r\nfunction parseBorderWidth(vm, maxW, maxH) {\r\n\tvar value = vm.borderWidth;\r\n\tvar skip = parseBorderSkipped(vm);\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = +value.top || 0;\r\n\t\tr = +value.right || 0;\r\n\t\tb = +value.bottom || 0;\r\n\t\tl = +value.left || 0;\r\n\t} else {\r\n\t\tt = r = b = l = +value || 0;\r\n\t}\r\n\r\n\treturn {\r\n\t\tt: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,\r\n\t\tr: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,\r\n\t\tb: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,\r\n\t\tl: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l\r\n\t};\r\n}\r\n\r\nfunction boundingRects(vm) {\r\n\tvar bounds = getBarBounds(vm);\r\n\tvar width = bounds.right - bounds.left;\r\n\tvar height = bounds.bottom - bounds.top;\r\n\tvar border = parseBorderWidth(vm, width / 2, height / 2);\r\n\r\n\treturn {\r\n\t\touter: {\r\n\t\t\tx: bounds.left,\r\n\t\t\ty: bounds.top,\r\n\t\t\tw: width,\r\n\t\t\th: height\r\n\t\t},\r\n\t\tinner: {\r\n\t\t\tx: bounds.left + border.l,\r\n\t\t\ty: bounds.top + border.t,\r\n\t\t\tw: width - border.l - border.r,\r\n\t\t\th: height - border.t - border.b\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction inRange(vm, x, y) {\r\n\tvar skipX = x === null;\r\n\tvar skipY = y === null;\r\n\tvar bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);\r\n\r\n\treturn bounds\r\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\r\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\r\n}\r\n\r\nvar element_rectangle = core_element.extend({\r\n\t_type: 'rectangle',\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar rects = boundingRects(vm);\r\n\t\tvar outer = rects.outer;\r\n\t\tvar inner = rects.inner;\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.fillRect(outer.x, outer.y, outer.w, outer.h);\r\n\r\n\t\tif (outer.w === inner.w && outer.h === inner.h) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(outer.x, outer.y, outer.w, outer.h);\r\n\t\tctx.clip();\r\n\t\tctx.fillStyle = vm.borderColor;\r\n\t\tctx.rect(inner.x, inner.y, inner.w, inner.h);\r\n\t\tctx.fill('evenodd');\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\theight: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm.base - vm.y;\r\n\t},\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\treturn inRange(this._view, mouseX, mouseY);\r\n\t},\r\n\r\n\tinLabelRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn isVertical(vm)\r\n\t\t\t? inRange(vm, mouseX, null)\r\n\t\t\t: inRange(vm, null, mouseY);\r\n\t},\r\n\r\n\tinXRange: function(mouseX) {\r\n\t\treturn inRange(this._view, mouseX, null);\r\n\t},\r\n\r\n\tinYRange: function(mouseY) {\r\n\t\treturn inRange(this._view, null, mouseY);\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar x, y;\r\n\t\tif (isVertical(vm)) {\r\n\t\t\tx = vm.x;\r\n\t\t\ty = (vm.y + vm.base) / 2;\r\n\t\t} else {\r\n\t\t\tx = (vm.x + vm.base) / 2;\r\n\t\t\ty = vm.y;\r\n\t\t}\r\n\r\n\t\treturn {x: x, y: y};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\r\n\t\treturn isVertical(vm)\r\n\t\t\t? vm.width * Math.abs(vm.y - vm.base)\r\n\t\t\t: vm.height * Math.abs(vm.x - vm.base);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t}\r\n});\n\nvar elements = {};\r\nvar Arc = element_arc;\r\nvar Line = element_line;\r\nvar Point = element_point;\r\nvar Rectangle = element_rectangle;\nelements.Arc = Arc;\nelements.Line = Line;\nelements.Point = Point;\nelements.Rectangle = Rectangle;\n\nvar deprecated = helpers$1._deprecated;\r\nvar valueOrDefault$3 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('bar', {\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tbar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\r\n * @private\r\n */\r\nfunction computeMinSampleSize(scale, pixels) {\r\n\tvar min = scale._length;\r\n\tvar prev, curr, i, ilen;\r\n\r\n\tfor (i = 1, ilen = pixels.length; i < ilen; ++i) {\r\n\t\tmin = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\r\n\t}\r\n\r\n\tfor (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {\r\n\t\tcurr = scale.getPixelForTick(i);\r\n\t\tmin = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;\r\n\t\tprev = curr;\r\n\t}\r\n\r\n\treturn min;\r\n}\r\n\r\n/**\r\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\r\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\r\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\r\n * @private\r\n */\r\nfunction computeFitCategoryTraits(index, ruler, options) {\r\n\tvar thickness = options.barThickness;\r\n\tvar count = ruler.stackCount;\r\n\tvar curr = ruler.pixels[index];\r\n\tvar min = helpers$1.isNullOrUndef(thickness)\r\n\t\t? computeMinSampleSize(ruler.scale, ruler.pixels)\r\n\t\t: -1;\r\n\tvar size, ratio;\r\n\r\n\tif (helpers$1.isNullOrUndef(thickness)) {\r\n\t\tsize = min * options.categoryPercentage;\r\n\t\tratio = options.barPercentage;\r\n\t} else {\r\n\t\t// When bar thickness is enforced, category and bar percentages are ignored.\r\n\t\t// Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\r\n\t\t// and deprecate barPercentage since this value is ignored when thickness is absolute.\r\n\t\tsize = thickness * count;\r\n\t\tratio = 1;\r\n\t}\r\n\r\n\treturn {\r\n\t\tchunk: size / count,\r\n\t\tratio: ratio,\r\n\t\tstart: curr - (size / 2)\r\n\t};\r\n}\r\n\r\n/**\r\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\r\n * percentage options are 1), based on the previous and following categories. This mode\r\n * generates bars with different widths when data are not evenly spaced.\r\n * @private\r\n */\r\nfunction computeFlexCategoryTraits(index, ruler, options) {\r\n\tvar pixels = ruler.pixels;\r\n\tvar curr = pixels[index];\r\n\tvar prev = index > 0 ? pixels[index - 1] : null;\r\n\tvar next = index < pixels.length - 1 ? pixels[index + 1] : null;\r\n\tvar percent = options.categoryPercentage;\r\n\tvar start, size;\r\n\r\n\tif (prev === null) {\r\n\t\t// first data: its size is double based on the next point or,\r\n\t\t// if it's also the last data, we use the scale size.\r\n\t\tprev = curr - (next === null ? ruler.end - ruler.start : next - curr);\r\n\t}\r\n\r\n\tif (next === null) {\r\n\t\t// last data: its size is also double based on the previous point.\r\n\t\tnext = curr + curr - prev;\r\n\t}\r\n\r\n\tstart = curr - (curr - Math.min(prev, next)) / 2 * percent;\r\n\tsize = Math.abs(next - prev) / 2 * percent;\r\n\r\n\treturn {\r\n\t\tchunk: size / ruler.stackCount,\r\n\t\tratio: options.barPercentage,\r\n\t\tstart: start\r\n\t};\r\n}\r\n\r\nvar controller_bar = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Rectangle,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderSkipped',\r\n\t\t'borderWidth',\r\n\t\t'barPercentage',\r\n\t\t'barThickness',\r\n\t\t'categoryPercentage',\r\n\t\t'maxBarThickness',\r\n\t\t'minBarLength'\r\n\t],\r\n\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta, scaleOpts;\r\n\r\n\t\tcore_datasetController.prototype.initialize.apply(me, arguments);\r\n\r\n\t\tmeta = me.getMeta();\r\n\t\tmeta.stack = me.getDataset().stack;\r\n\t\tmeta.bar = true;\r\n\r\n\t\tscaleOpts = me._getIndexScale().options;\r\n\t\tdeprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');\r\n\t\tdeprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');\r\n\t\tdeprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');\r\n\t\tdeprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');\r\n\t\tdeprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._ruler = me.getRuler();\r\n\r\n\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(rects[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(rectangle, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar options = me._resolveDataElementOptions(rectangle, index);\r\n\r\n\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\r\n\t\trectangle._datasetIndex = me.index;\r\n\t\trectangle._index = index;\r\n\t\trectangle._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderSkipped: options.borderSkipped,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\tdatasetLabel: dataset.label,\r\n\t\t\tlabel: me.chart.data.labels[index]\r\n\t\t};\r\n\r\n\t\tif (helpers$1.isArray(dataset.data[index])) {\r\n\t\t\trectangle._model.borderSkipped = null;\r\n\t\t}\r\n\r\n\t\tme._updateElementGeometry(rectangle, index, reset, options);\r\n\r\n\t\trectangle.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateElementGeometry: function(rectangle, index, reset, options) {\r\n\t\tvar me = this;\r\n\t\tvar model = rectangle._model;\r\n\t\tvar vscale = me._getValueScale();\r\n\t\tvar base = vscale.getBasePixel();\r\n\t\tvar horizontal = vscale.isHorizontal();\r\n\t\tvar ruler = me._ruler || me.getRuler();\r\n\t\tvar vpixels = me.calculateBarValuePixels(me.index, index, options);\r\n\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);\r\n\r\n\t\tmodel.horizontal = horizontal;\r\n\t\tmodel.base = reset ? base : vpixels.base;\r\n\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\r\n\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\r\n\t\tmodel.height = horizontal ? ipixels.size : undefined;\r\n\t\tmodel.width = horizontal ? undefined : ipixels.size;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stacks based on groups and bar visibility.\r\n\t * @param {number} [last] - The dataset index\r\n\t * @returns {string[]} The list of stack IDs\r\n\t * @private\r\n\t */\r\n\t_getStacks: function(last) {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar stacks = [];\r\n\t\tvar i, meta;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\t// stacked | meta.stack\r\n\t\t\t// | found | not found | undefined\r\n\t\t\t// false | x | x | x\r\n\t\t\t// true | | x |\r\n\t\t\t// undefined | | x | x\r\n\t\t\tif (stacked === false || stacks.indexOf(meta.stack) === -1 ||\r\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\r\n\t\t\t\tstacks.push(meta.stack);\r\n\t\t\t}\r\n\t\t\tif (meta.index === last) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn stacks;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the effective number of stacks based on groups and bar visibility.\r\n\t * @private\r\n\t */\r\n\tgetStackCount: function() {\r\n\t\treturn this._getStacks().length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\r\n\t * @param {number} [datasetIndex] - The dataset index\r\n\t * @param {string} [name] - The stack name to find\r\n\t * @returns {number} The stack index\r\n\t * @private\r\n\t */\r\n\tgetStackIndex: function(datasetIndex, name) {\r\n\t\tvar stacks = this._getStacks(datasetIndex);\r\n\t\tvar index = (name !== undefined)\r\n\t\t\t? stacks.indexOf(name)\r\n\t\t\t: -1; // indexOf returns -1 if element is not present\r\n\r\n\t\treturn (index === -1)\r\n\t\t\t? stacks.length - 1\r\n\t\t\t: index;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetRuler: function() {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar pixels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\r\n\t\t\tpixels.push(scale.getPixelForValue(null, i, me.index));\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tpixels: pixels,\r\n\t\t\tstart: scale._startPixel,\r\n\t\t\tend: scale._endPixel,\r\n\t\t\tstackCount: me.getStackCount(),\r\n\t\t\tscale: scale\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Note: pixel values are not clamped to the scale area.\r\n\t * @private\r\n\t */\r\n\tcalculateBarValuePixels: function(datasetIndex, index, options) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar isHorizontal = scale.isHorizontal();\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar value = scale._parseValue(datasets[datasetIndex].data[index]);\r\n\t\tvar minBarLength = options.minBarLength;\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar stack = me.getMeta().stack;\r\n\t\tvar start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;\r\n\t\tvar length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, imeta, ivalue, base, head, size, stackLength;\r\n\r\n\t\tif (stacked || (stacked === undefined && stack !== undefined)) {\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\timeta = metasets[i];\r\n\r\n\t\t\t\tif (imeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (imeta.stack === stack) {\r\n\t\t\t\t\tstackLength = scale._parseValue(datasets[imeta.index].data[index]);\r\n\t\t\t\t\tivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;\r\n\r\n\t\t\t\t\tif ((value.min < 0 && ivalue < 0) || (value.max >= 0 && ivalue > 0)) {\r\n\t\t\t\t\t\tstart += ivalue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbase = scale.getPixelForValue(start);\r\n\t\thead = scale.getPixelForValue(start + length);\r\n\t\tsize = head - base;\r\n\r\n\t\tif (minBarLength !== undefined && Math.abs(size) < minBarLength) {\r\n\t\t\tsize = minBarLength;\r\n\t\t\tif (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {\r\n\t\t\t\thead = base - minBarLength;\r\n\t\t\t} else {\r\n\t\t\t\thead = base + minBarLength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tsize: size,\r\n\t\t\tbase: base,\r\n\t\t\thead: head,\r\n\t\t\tcenter: head + size / 2\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tcalculateBarIndexPixels: function(datasetIndex, index, ruler, options) {\r\n\t\tvar me = this;\r\n\t\tvar range = options.barThickness === 'flex'\r\n\t\t\t? computeFlexCategoryTraits(index, ruler, options)\r\n\t\t\t: computeFitCategoryTraits(index, ruler, options);\r\n\r\n\t\tvar stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\r\n\t\tvar center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\r\n\t\tvar size = Math.min(\r\n\t\t\tvalueOrDefault$3(options.maxBarThickness, Infinity),\r\n\t\t\trange.chunk * range.ratio);\r\n\r\n\t\treturn {\r\n\t\t\tbase: center - size / 2,\r\n\t\t\thead: center + size / 2,\r\n\t\t\tcenter: center,\r\n\t\t\tsize: size\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar ilen = rects.length;\r\n\t\tvar i = 0;\r\n\r\n\t\thelpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tvar val = scale._parseValue(dataset.data[i]);\r\n\t\t\tif (!isNaN(val.min) && !isNaN(val.max)) {\r\n\t\t\t\trects[i].draw();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));\r\n\t\tvar indexOpts = me._getIndexScale().options;\r\n\t\tvar valueOpts = me._getValueScale().options;\r\n\r\n\t\tvalues.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);\r\n\t\tvalues.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);\r\n\t\tvalues.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);\r\n\t\tvalues.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);\r\n\t\tvalues.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);\r\n\r\n\t\treturn values;\r\n\t}\r\n\r\n});\n\nvar valueOrDefault$4 = helpers$1.valueOrDefault;\r\nvar resolve$1 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('bubble', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\r\n\t\t\tposition: 'bottom',\r\n\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\r\n\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\r\n\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_bubble = core_datasetController.extend({\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t\t'hoverRadius',\r\n\t\t'hitRadius',\r\n\t\t'pointStyle',\r\n\t\t'rotation'\r\n\t],\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data;\r\n\r\n\t\t// Update Points\r\n\t\thelpers$1.each(points, function(point, index) {\r\n\t\t\tme.updateElement(point, index, reset);\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tvar yScale = me.getScaleForId(meta.yAxisID);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar data = me.getDataset().data[index];\r\n\t\tvar dsIndex = me.index;\r\n\r\n\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\r\n\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\r\n\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = dsIndex;\r\n\t\tpoint._index = index;\r\n\t\tpoint._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\thitRadius: options.hitRadius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tradius: reset ? 0 : options.radius,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t};\r\n\r\n\t\tpoint.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = options.radius + options.hoverRadius;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(point, index) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar data = dataset.data[index] || {};\r\n\t\tvar values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments);\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// In case values were cached (and thus frozen), we need to clone the values\r\n\t\tif (me._cachedDataOpts === values) {\r\n\t\t\tvalues = helpers$1.extend({}, values);\r\n\t\t}\r\n\r\n\t\t// Custom radius resolution\r\n\t\tvalues.radius = resolve$1([\r\n\t\t\tcustom.radius,\r\n\t\t\tdata.r,\r\n\t\t\tme._config.radius,\r\n\t\t\tchart.options.elements.point.radius\r\n\t\t], context, index);\r\n\r\n\t\treturn values;\r\n\t}\r\n});\n\nvar valueOrDefault$5 = helpers$1.valueOrDefault;\r\n\r\nvar PI$1 = Math.PI;\r\nvar DOUBLE_PI$1 = PI$1 * 2;\r\nvar HALF_PI$1 = PI$1 / 2;\r\n\r\ncore_defaults._set('doughnut', {\r\n\tanimation: {\r\n\t\t// Boolean - Whether we animate the rotation of the Doughnut\r\n\t\tanimateRotate: true,\r\n\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\r\n\t\tanimateScale: false\r\n\t},\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t// toggle visibility of index if exists\r\n\t\t\t\tif (meta.data[index]) {\r\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// The percentage of the chart that we cut out of the middle.\r\n\tcutoutPercentage: 50,\r\n\r\n\t// The rotation of the chart, where the first data arc begins.\r\n\trotation: -HALF_PI$1,\r\n\r\n\t// The total circumference of the chart.\r\n\tcircumference: DOUBLE_PI$1,\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\r\n\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\r\n\r\n\t\t\t\tif (helpers$1.isArray(dataLabel)) {\r\n\t\t\t\t\t// show value on first line of multiline label\r\n\t\t\t\t\t// need to clone because we are changing the value\r\n\t\t\t\t\tdataLabel = dataLabel.slice();\r\n\t\t\t\t\tdataLabel[0] += value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdataLabel += value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dataLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_doughnut = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\r\n\tgetRingIndex: function(datasetIndex) {\r\n\t\tvar ringIndex = 0;\r\n\r\n\t\tfor (var j = 0; j < datasetIndex; ++j) {\r\n\t\t\tif (this.chart.isDatasetVisible(j)) {\r\n\t\t\t\t++ringIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringIndex;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar ratioX = 1;\r\n\t\tvar ratioY = 1;\r\n\t\tvar offsetX = 0;\r\n\t\tvar offsetY = 0;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar arcs = meta.data;\r\n\t\tvar cutout = opts.cutoutPercentage / 100 || 0;\r\n\t\tvar circumference = opts.circumference;\r\n\t\tvar chartWeight = me._getRingWeight(me.index);\r\n\t\tvar maxWidth, maxHeight, i, ilen;\r\n\r\n\t\t// If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\r\n\t\tif (circumference < DOUBLE_PI$1) {\r\n\t\t\tvar startAngle = opts.rotation % DOUBLE_PI$1;\r\n\t\t\tstartAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;\r\n\t\t\tvar endAngle = startAngle + circumference;\r\n\t\t\tvar startX = Math.cos(startAngle);\r\n\t\t\tvar startY = Math.sin(startAngle);\r\n\t\t\tvar endX = Math.cos(endAngle);\r\n\t\t\tvar endY = Math.sin(endAngle);\r\n\t\t\tvar contains0 = (startAngle <= 0 && endAngle >= 0) || endAngle >= DOUBLE_PI$1;\r\n\t\t\tvar contains90 = (startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1) || endAngle >= DOUBLE_PI$1 + HALF_PI$1;\r\n\t\t\tvar contains180 = startAngle === -PI$1 || endAngle >= PI$1;\r\n\t\t\tvar contains270 = (startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1) || endAngle >= PI$1 + HALF_PI$1;\r\n\t\t\tvar minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tvar maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tratioX = (maxX - minX) / 2;\r\n\t\t\tratioY = (maxY - minY) / 2;\r\n\t\t\toffsetX = -(maxX + minX) / 2;\r\n\t\t\toffsetY = -(maxY + minY) / 2;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t}\r\n\r\n\t\tchart.borderWidth = me.getMaxBorderWidth();\r\n\t\tmaxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;\r\n\t\tmaxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;\r\n\t\tchart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\r\n\t\tchart.innerRadius = Math.max(chart.outerRadius * cutout, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\r\n\t\tchart.offsetX = offsetX * chart.outerRadius;\r\n\t\tchart.offsetY = offsetY * chart.outerRadius;\r\n\r\n\t\tmeta.total = me.calculateTotal();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\r\n\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\r\n\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\r\n\t\tvar startAngle = opts.rotation; // non reset case handled later\r\n\t\tvar endAngle = opts.rotation; // non reset case handled later\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);\r\n\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\r\n\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX + chart.offsetX,\r\n\t\t\t\ty: centerY + chart.offsetY,\r\n\t\t\t\tstartAngle: startAngle,\r\n\t\t\t\tendAngle: endAngle,\r\n\t\t\t\tcircumference: circumference,\r\n\t\t\t\touterRadius: outerRadius,\r\n\t\t\t\tinnerRadius: innerRadius,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvar model = arc._model;\r\n\r\n\t\t// Set correct angles if not resetting\r\n\t\tif (!reset || !animationOpts.animateRotate) {\r\n\t\t\tif (index === 0) {\r\n\t\t\t\tmodel.startAngle = opts.rotation;\r\n\t\t\t} else {\r\n\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\r\n\t\t\t}\r\n\r\n\t\t\tmodel.endAngle = model.startAngle + model.circumference;\r\n\t\t}\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcalculateTotal: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar total = 0;\r\n\t\tvar value;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tvalue = dataset.data[index];\r\n\t\t\tif (!isNaN(value) && !element.hidden) {\r\n\t\t\t\ttotal += Math.abs(value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/* if (total === 0) {\r\n\t\t\ttotal = NaN;\r\n\t\t}*/\r\n\r\n\t\treturn total;\r\n\t},\r\n\r\n\tcalculateCircumference: function(value) {\r\n\t\tvar total = this.getMeta().total;\r\n\t\tif (total > 0 && !isNaN(value)) {\r\n\t\t\treturn DOUBLE_PI$1 * (Math.abs(value) / total);\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// gets the max border or hover width to properly scale pie charts\r\n\tgetMaxBorderWidth: function(arcs) {\r\n\t\tvar me = this;\r\n\t\tvar max = 0;\r\n\t\tvar chart = me.chart;\r\n\t\tvar i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\r\n\r\n\t\tif (!arcs) {\r\n\t\t\t// Find the outmost visible dataset\r\n\t\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t\tarcs = meta.data;\r\n\t\t\t\t\tif (i !== me.index) {\r\n\t\t\t\t\t\tcontroller = meta.controller;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!arcs) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarc = arcs[i];\r\n\t\t\tif (controller) {\r\n\t\t\t\tcontroller._configure();\r\n\t\t\t\toptions = controller._resolveDataElementOptions(arc, i);\r\n\t\t\t} else {\r\n\t\t\t\toptions = arc._options;\r\n\t\t\t}\r\n\t\t\tif (options.borderAlign !== 'inner') {\r\n\t\t\t\tborderWidth = options.borderWidth;\r\n\t\t\t\thoverWidth = options.hoverBorderWidth;\r\n\r\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\r\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn max;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\r\n\t * @private\r\n\t */\r\n\t_getRingWeightOffset: function(datasetIndex) {\r\n\t\tvar ringWeightOffset = 0;\r\n\r\n\t\tfor (var i = 0; i < datasetIndex; ++i) {\r\n\t\t\tif (this.chart.isDatasetVisible(i)) {\r\n\t\t\t\tringWeightOffset += this._getRingWeight(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringWeightOffset;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getRingWeight: function(dataSetIndex) {\r\n\t\treturn Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the sum of all visibile data set weights. This value can be 0.\r\n\t * @private\r\n\t */\r\n\t_getVisibleDatasetWeightTotal: function() {\r\n\t\treturn this._getRingWeightOffset(this.chart.data.datasets.length);\r\n\t}\r\n});\n\ncore_defaults._set('horizontalBar', {\r\n\thover: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tposition: 'left',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}]\r\n\t},\r\n\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tborderSkipped: 'left'\r\n\t\t}\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\thorizontalBar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_horizontalBar = controller_bar.extend({\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t}\r\n});\n\nvar valueOrDefault$6 = helpers$1.valueOrDefault;\r\nvar resolve$2 = helpers$1.options.resolve;\r\nvar isPointInArea = helpers$1.canvas._isPointInArea;\r\n\r\ncore_defaults._set('line', {\r\n\tshowLines: true,\r\n\tspanGaps: false,\r\n\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tid: 'x-axis-0'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\nfunction scaleClip(scale, halfBorderWidth) {\r\n\tvar tickOpts = scale && scale.options.ticks || {};\r\n\tvar reverse = tickOpts.reverse;\r\n\tvar min = tickOpts.min === undefined ? halfBorderWidth : 0;\r\n\tvar max = tickOpts.max === undefined ? halfBorderWidth : 0;\r\n\treturn {\r\n\t\tstart: reverse ? max : min,\r\n\t\tend: reverse ? min : max\r\n\t};\r\n}\r\n\r\nfunction defaultClip(xScale, yScale, borderWidth) {\r\n\tvar halfBorderWidth = borderWidth / 2;\r\n\tvar x = scaleClip(xScale, halfBorderWidth);\r\n\tvar y = scaleClip(yScale, halfBorderWidth);\r\n\r\n\treturn {\r\n\t\ttop: y.end,\r\n\t\tright: x.end,\r\n\t\tbottom: y.start,\r\n\t\tleft: x.start\r\n\t};\r\n}\r\n\r\nfunction toClip(value) {\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = value.top;\r\n\t\tr = value.right;\r\n\t\tb = value.bottom;\r\n\t\tl = value.left;\r\n\t} else {\r\n\t\tt = r = b = l = value;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttop: t,\r\n\t\tright: r,\r\n\t\tbottom: b,\r\n\t\tleft: l\r\n\t};\r\n}\r\n\r\n\r\nvar controller_line = core_datasetController.extend({\r\n\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth',\r\n\t\t'cubicInterpolationMode',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar options = me.chart.options;\r\n\t\tvar config = me._config;\r\n\t\tvar showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tme._yScale = me.getScaleForId(meta.yAxisID);\r\n\r\n\t\t// Update Line\r\n\t\tif (showLine) {\r\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\t\tconfig.lineTension = config.tension;\r\n\t\t\t}\r\n\r\n\t\t\t// Utility\r\n\t\t\tline._scale = me._yScale;\r\n\t\t\tline._datasetIndex = me.index;\r\n\t\t\t// Data\r\n\t\t\tline._children = points;\r\n\t\t\t// Model\r\n\t\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\t\tline.pivot();\r\n\t\t}\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\tif (showLine && line._model.tension !== 0) {\r\n\t\t\tme.updateBezierControlPoints();\r\n\t\t}\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar datasetIndex = me.index;\r\n\t\tvar value = dataset.data[index];\r\n\t\tvar xScale = me._xScale;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar x, y;\r\n\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\r\n\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\r\n\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\r\n\r\n\t\t// Utility\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = datasetIndex;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\r\n\t\t\tsteppedLine: lineModel ? lineModel.steppedLine : false,\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element) {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = me.chart.options;\r\n\t\tvar lineOptions = options.elements.line;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\t// The default behavior of lines is to break at null values, according\r\n\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\r\n\t\t// This option gives lines the ability to span gaps\r\n\t\tvalues.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);\r\n\t\tvalues.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);\r\n\t\tvalues.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tcalculatePointY: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar sumPos = 0;\r\n\t\tvar sumNeg = 0;\r\n\t\tvar i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;\r\n\r\n\t\tif (yScale.options.stacked) {\r\n\t\t\trightValue = +yScale.getRightValue(value);\r\n\t\t\tmetasets = chart._getSortedVisibleDatasetMetas();\r\n\t\t\tilen = metasets.length;\r\n\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\tdsMeta = metasets[i];\r\n\t\t\t\tif (dsMeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tds = chart.data.datasets[dsMeta.index];\r\n\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {\r\n\t\t\t\t\tstackedRightValue = +yScale.getRightValue(ds.data[index]);\r\n\t\t\t\t\tif (stackedRightValue < 0) {\r\n\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsumPos += stackedRightValue || 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (rightValue < 0) {\r\n\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\r\n\t\t\t}\r\n\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\r\n\t\t}\r\n\t\treturn yScale.getPixelForValue(value);\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (lineModel.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tif (lineModel.cubicInterpolationMode === 'monotone') {\r\n\t\t\thelpers$1.splineCurveMonotone(points);\r\n\t\t} else {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\t\thelpers$1.previousItem(points, i)._model,\r\n\t\t\t\t\tmodel,\r\n\t\t\t\t\thelpers$1.nextItem(points, i)._model,\r\n\t\t\t\t\tlineModel.tension\r\n\t\t\t\t);\r\n\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\r\n\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\r\n\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\r\n\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (chart.options.elements.line.capBezierPoints) {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tif (isPointInArea(model, area)) {\r\n\t\t\t\t\tif (i > 0 && isPointInArea(points[i - 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data || [];\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar i = 0;\r\n\t\tvar ilen = points.length;\r\n\t\tvar clip;\r\n\r\n\t\tif (me._showLine) {\r\n\t\t\tclip = meta.dataset._model.clip;\r\n\r\n\t\t\thelpers$1.canvas.clipArea(chart.ctx, {\r\n\t\t\t\tleft: clip.left === false ? 0 : area.left - clip.left,\r\n\t\t\t\tright: clip.right === false ? canvas.width : area.right + clip.right,\r\n\t\t\t\ttop: clip.top === false ? 0 : area.top - clip.top,\r\n\t\t\t\tbottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom\r\n\t\t\t});\r\n\r\n\t\t\tmeta.dataset.draw();\r\n\r\n\t\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t\t}\r\n\r\n\t\t// Draw the points\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tpoints[i].draw(area);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$6(options.hoverRadius, options.radius);\r\n\t},\r\n});\n\nvar resolve$3 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('polarArea', {\r\n\tscale: {\r\n\t\ttype: 'radialLinear',\r\n\t\tangleLines: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tgridLines: {\r\n\t\t\tcircular: true\r\n\t\t},\r\n\t\tpointLabels: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tticks: {\r\n\t\t\tbeginAtZero: true\r\n\t\t}\r\n\t},\r\n\r\n\t// Boolean - Whether to animate the rotation of the chart\r\n\tanimation: {\r\n\t\tanimateRotate: true,\r\n\t\tanimateScale: true\r\n\t},\r\n\r\n\tstartAngle: -0.5 * Math.PI,\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_polarArea = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar start = me.chart.options.startAngle || 0;\r\n\t\tvar starts = me._starts = [];\r\n\t\tvar angles = me._angles = [];\r\n\t\tvar arcs = meta.data;\r\n\t\tvar i, ilen, angle;\r\n\r\n\t\tme._updateRadius();\r\n\r\n\t\tmeta.count = me.countVisibleElements();\r\n\r\n\t\tfor (i = 0, ilen = dataset.data.length; i < ilen; i++) {\r\n\t\t\tstarts[i] = start;\r\n\t\t\tangle = me._computeAngle(i);\r\n\t\t\tangles[i] = angle;\r\n\t\t\tstart += angle;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateRadius: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\r\n\r\n\t\tchart.outerRadius = Math.max(minSize / 2, 0);\r\n\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\r\n\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar scale = chart.scale;\r\n\t\tvar labels = chart.data.labels;\r\n\r\n\t\tvar centerX = scale.xCenter;\r\n\t\tvar centerY = scale.yCenter;\r\n\r\n\t\t// var negHalfPI = -0.5 * Math.PI;\r\n\t\tvar datasetStartAngle = opts.startAngle;\r\n\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar startAngle = me._starts[index];\r\n\t\tvar endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\r\n\r\n\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\t\t\t_scale: scale,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX,\r\n\t\t\t\ty: centerY,\r\n\t\t\t\tinnerRadius: 0,\r\n\t\t\t\touterRadius: reset ? resetRadius : distance,\r\n\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\r\n\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcountVisibleElements: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar count = 0;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn count;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\t\tvar valueOrDefault = helpers$1.valueOrDefault;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeAngle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar count = this.getMeta().count;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\r\n\t\tif (isNaN(dataset.data[index]) || meta.data[index].hidden) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: me.chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\treturn resolve$3([\r\n\t\t\tme.chart.options.elements.arc.angle,\r\n\t\t\t(2 * Math.PI) / count\r\n\t\t], context, index);\r\n\t}\r\n});\n\ncore_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\r\ncore_defaults._set('pie', {\r\n\tcutoutPercentage: 0\r\n});\r\n\r\n// Pie charts are Doughnut chart with different defaults\r\nvar controller_pie = controller_doughnut;\n\nvar valueOrDefault$7 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('radar', {\r\n\tspanGaps: false,\r\n\tscale: {\r\n\t\ttype: 'radialLinear'\r\n\t},\r\n\telements: {\r\n\t\tline: {\r\n\t\t\tfill: 'start',\r\n\t\t\ttension: 0 // no bezier in radar\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_radar = core_datasetController.extend({\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderWidth',\r\n\t\t'borderColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar config = me._config;\r\n\t\tvar i, ilen;\r\n\r\n\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\tconfig.lineTension = config.tension;\r\n\t\t}\r\n\r\n\t\t// Utility\r\n\t\tline._scale = scale;\r\n\t\tline._datasetIndex = me.index;\r\n\t\t// Data\r\n\t\tline._children = points;\r\n\t\tline._loop = true;\r\n\t\t// Model\r\n\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\tline.pivot();\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\t// Update bezier control points\r\n\t\tme.updateBezierControlPoints();\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar lineModel = me.getMeta().dataset._model;\r\n\t\tvar x = reset ? scale.xCenter : pointPosition.x;\r\n\t\tvar y = reset ? scale.yCenter : pointPosition.y;\r\n\r\n\t\t// Utility\r\n\t\tpoint._scale = scale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = me.index;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x, // value not used in dataset scale, but we want a consistent API between scales\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),\r\n\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar options = me.chart.options;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\tvalues.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar area = me.chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (meta.dataset._model.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tmodel = points[i]._model;\r\n\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\thelpers$1.previousItem(points, i, true)._model,\r\n\t\t\t\tmodel,\r\n\t\t\t\thelpers$1.nextItem(points, i, true)._model,\r\n\t\t\t\tmodel.tension\r\n\t\t\t);\r\n\r\n\t\t\t// Prevent the bezier going outside of the bounds of the graph\r\n\t\t\tmodel.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\r\n\t\t\tmodel.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\r\n\t\t\tmodel.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\r\n\t\t\tmodel.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$7(options.hoverRadius, options.radius);\r\n\t}\r\n});\n\ncore_defaults._set('scatter', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\tid: 'x-axis-1', // need an ID so datasets can reference the scale\r\n\t\t\ttype: 'linear', // scatter should not use a category axis\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\tid: 'y-axis-1',\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn ''; // doesn't make sense for scatter since data are formatted as a point\r\n\t\t\t},\r\n\t\t\tlabel: function(item) {\r\n\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tscatter: {\r\n\t\t\tshowLine: false\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Scatter charts use line controllers\r\nvar controller_scatter = controller_line;\n\n// NOTE export a map in which the key represents the controller type, not\r\n// the class, and so must be CamelCase in order to be correctly retrieved\r\n// by the controller in core.controller.js (`controllers[meta.type]`).\r\n\r\nvar controllers = {\r\n\tbar: controller_bar,\r\n\tbubble: controller_bubble,\r\n\tdoughnut: controller_doughnut,\r\n\thorizontalBar: controller_horizontalBar,\r\n\tline: controller_line,\r\n\tpolarArea: controller_polarArea,\r\n\tpie: controller_pie,\r\n\tradar: controller_radar,\r\n\tscatter: controller_scatter\r\n};\n\n/**\r\n * Helper function to get relative position for an event\r\n * @param {Event|IEvent} event - The event to get the position for\r\n * @param {Chart} chart - The chart\r\n * @returns {object} the event position\r\n */\r\nfunction getRelativePosition(e, chart) {\r\n\tif (e.native) {\r\n\t\treturn {\r\n\t\t\tx: e.x,\r\n\t\t\ty: e.y\r\n\t\t};\r\n\t}\r\n\r\n\treturn helpers$1.getRelativePosition(e, chart);\r\n}\r\n\r\n/**\r\n * Helper function to traverse all of the visible elements in the chart\r\n * @param {Chart} chart - the chart\r\n * @param {function} handler - the callback to execute for each visible item\r\n */\r\nfunction parseVisibleItems(chart, handler) {\r\n\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\tvar metadata, i, j, ilen, jlen, element;\r\n\r\n\tfor (i = 0, ilen = metasets.length; i < ilen; ++i) {\r\n\t\tmetadata = metasets[i].data;\r\n\t\tfor (j = 0, jlen = metadata.length; j < jlen; ++j) {\r\n\t\t\telement = metadata[j];\r\n\t\t\tif (!element._view.skip) {\r\n\t\t\t\thandler(element);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Helper function to get the items that intersect the event position\r\n * @param {ChartElement[]} items - elements to filter\r\n * @param {object} position - the point to be nearest to\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getIntersectItems(chart, position) {\r\n\tvar elements = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\r\n * @param {Chart} chart - the chart to look at elements from\r\n * @param {object} position - the point to be nearest to\r\n * @param {boolean} intersect - if true, only consider items that intersect the position\r\n * @param {function} distanceMetric - function to provide the distance between points\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getNearestItems(chart, position, intersect, distanceMetric) {\r\n\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\tvar nearestItems = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (intersect && !element.inRange(position.x, position.y)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar center = element.getCenterPoint();\r\n\t\tvar distance = distanceMetric(position, center);\r\n\t\tif (distance < minDistance) {\r\n\t\t\tnearestItems = [element];\r\n\t\t\tminDistance = distance;\r\n\t\t} else if (distance === minDistance) {\r\n\t\t\t// Can have multiple items at the same distance in which case we sort by size\r\n\t\t\tnearestItems.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn nearestItems;\r\n}\r\n\r\n/**\r\n * Get a distance metric function for two points based on the\r\n * axis mode setting\r\n * @param {string} axis - the axis mode. x|y|xy\r\n */\r\nfunction getDistanceMetricForAxis(axis) {\r\n\tvar useX = axis.indexOf('x') !== -1;\r\n\tvar useY = axis.indexOf('y') !== -1;\r\n\r\n\treturn function(pt1, pt2) {\r\n\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\r\n\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\r\n\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\r\n\t};\r\n}\r\n\r\nfunction indexMode(chart, e, options) {\r\n\tvar position = getRelativePosition(e, chart);\r\n\t// Default axis for index mode is 'x' to match old behaviour\r\n\toptions.axis = options.axis || 'x';\r\n\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\tvar elements = [];\r\n\r\n\tif (!items.length) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tchart._getSortedVisibleDatasetMetas().forEach(function(meta) {\r\n\t\tvar element = meta.data[items[0]._index];\r\n\r\n\t\t// don't count items that are skipped (null data)\r\n\t\tif (element && !element._view.skip) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * @interface IInteractionOptions\r\n */\r\n/**\r\n * If true, only consider items that intersect the point\r\n * @name IInterfaceOptions#boolean\r\n * @type Boolean\r\n */\r\n\r\n/**\r\n * Contains interaction related functions\r\n * @namespace Chart.Interaction\r\n */\r\nvar core_interaction = {\r\n\t// Helper function for different modes\r\n\tmodes: {\r\n\t\tsingle: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar elements = [];\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\telements.push(element);\r\n\t\t\t\t\treturn elements;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn elements.slice(0, 1);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.label\r\n\t\t * @deprecated since version 2.4.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tlabel: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\r\n\t\t * @function Chart.Interaction.modes.index\r\n\t\t * @since v2.4.0\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tindex: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\r\n\t\t * @function Chart.Interaction.modes.dataset\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tdataset: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\r\n\t\t\tif (items.length > 0) {\r\n\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\r\n\t\t\t}\r\n\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.x-axis\r\n\t\t * @deprecated since version 2.4.0. Use index mode and intersect == true\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\t'x-axis': function(chart, e) {\r\n\t\t\treturn indexMode(chart, e, {intersect: false});\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Point mode returns all elements that hit test based on the event position\r\n\t\t * of the event\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tpoint: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\treturn getIntersectItems(chart, position);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * nearest mode returns the element closest to the point\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tnearest: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\treturn getNearestItems(chart, position, options.intersect, distanceMetric);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * x mode returns the elements that hit-test at the current x coordinate\r\n\t\t * @function Chart.Interaction.modes.x\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tx: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inXRange(position.x)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * y mode returns the elements that hit-test at the current y coordinate\r\n\t\t * @function Chart.Interaction.modes.y\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\ty: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inYRange(position.y)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t}\r\n\t}\r\n};\n\nvar extend = helpers$1.extend;\r\n\r\nfunction filterByPosition(array, position) {\r\n\treturn helpers$1.where(array, function(v) {\r\n\t\treturn v.pos === position;\r\n\t});\r\n}\r\n\r\nfunction sortByWeight(array, reverse) {\r\n\treturn array.sort(function(a, b) {\r\n\t\tvar v0 = reverse ? b : a;\r\n\t\tvar v1 = reverse ? a : b;\r\n\t\treturn v0.weight === v1.weight ?\r\n\t\t\tv0.index - v1.index :\r\n\t\t\tv0.weight - v1.weight;\r\n\t});\r\n}\r\n\r\nfunction wrapBoxes(boxes) {\r\n\tvar layoutBoxes = [];\r\n\tvar i, ilen, box;\r\n\r\n\tfor (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\r\n\t\tbox = boxes[i];\r\n\t\tlayoutBoxes.push({\r\n\t\t\tindex: i,\r\n\t\t\tbox: box,\r\n\t\t\tpos: box.position,\r\n\t\t\thorizontal: box.isHorizontal(),\r\n\t\t\tweight: box.weight\r\n\t\t});\r\n\t}\r\n\treturn layoutBoxes;\r\n}\r\n\r\nfunction setLayoutDims(layouts, params) {\r\n\tvar i, ilen, layout;\r\n\tfor (i = 0, ilen = layouts.length; i < ilen; ++i) {\r\n\t\tlayout = layouts[i];\r\n\t\t// store width used instead of chartArea.w in fitBoxes\r\n\t\tlayout.width = layout.horizontal\r\n\t\t\t? layout.box.fullWidth && params.availableWidth\r\n\t\t\t: params.vBoxMaxWidth;\r\n\t\t// store height used instead of chartArea.h in fitBoxes\r\n\t\tlayout.height = layout.horizontal && params.hBoxMaxHeight;\r\n\t}\r\n}\r\n\r\nfunction buildLayoutBoxes(boxes) {\r\n\tvar layoutBoxes = wrapBoxes(boxes);\r\n\tvar left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\r\n\tvar right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\r\n\tvar top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\r\n\tvar bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\r\n\r\n\treturn {\r\n\t\tleftAndTop: left.concat(top),\r\n\t\trightAndBottom: right.concat(bottom),\r\n\t\tchartArea: filterByPosition(layoutBoxes, 'chartArea'),\r\n\t\tvertical: left.concat(right),\r\n\t\thorizontal: top.concat(bottom)\r\n\t};\r\n}\r\n\r\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\r\n\treturn Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\r\n}\r\n\r\nfunction updateDims(chartArea, params, layout) {\r\n\tvar box = layout.box;\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\tvar newWidth, newHeight;\r\n\r\n\tif (layout.size) {\r\n\t\t// this layout was already counted for, lets first reduce old size\r\n\t\tchartArea[layout.pos] -= layout.size;\r\n\t}\r\n\tlayout.size = layout.horizontal ? box.height : box.width;\r\n\tchartArea[layout.pos] += layout.size;\r\n\r\n\tif (box.getPadding) {\r\n\t\tvar boxPadding = box.getPadding();\r\n\t\tmaxPadding.top = Math.max(maxPadding.top, boxPadding.top);\r\n\t\tmaxPadding.left = Math.max(maxPadding.left, boxPadding.left);\r\n\t\tmaxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\r\n\t\tmaxPadding.right = Math.max(maxPadding.right, boxPadding.right);\r\n\t}\r\n\r\n\tnewWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');\r\n\tnewHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');\r\n\r\n\tif (newWidth !== chartArea.w || newHeight !== chartArea.h) {\r\n\t\tchartArea.w = newWidth;\r\n\t\tchartArea.h = newHeight;\r\n\r\n\t\t// return true if chart area changed in layout's direction\r\n\t\tvar sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];\r\n\t\treturn sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));\r\n\t}\r\n}\r\n\r\nfunction handleMaxPadding(chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction updatePos(pos) {\r\n\t\tvar change = Math.max(maxPadding[pos] - chartArea[pos], 0);\r\n\t\tchartArea[pos] += change;\r\n\t\treturn change;\r\n\t}\r\n\tchartArea.y += updatePos('top');\r\n\tchartArea.x += updatePos('left');\r\n\tupdatePos('right');\r\n\tupdatePos('bottom');\r\n}\r\n\r\nfunction getMargins(horizontal, chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction marginForPositions(positions) {\r\n\t\tvar margin = {left: 0, top: 0, right: 0, bottom: 0};\r\n\t\tpositions.forEach(function(pos) {\r\n\t\t\tmargin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\r\n\t\t});\r\n\t\treturn margin;\r\n\t}\r\n\r\n\treturn horizontal\r\n\t\t? marginForPositions(['left', 'right'])\r\n\t\t: marginForPositions(['top', 'bottom']);\r\n}\r\n\r\nfunction fitBoxes(boxes, chartArea, params) {\r\n\tvar refitBoxes = [];\r\n\tvar i, ilen, layout, box, refit, changed;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\r\n\t\tbox.update(\r\n\t\t\tlayout.width || chartArea.w,\r\n\t\t\tlayout.height || chartArea.h,\r\n\t\t\tgetMargins(layout.horizontal, chartArea)\r\n\t\t);\r\n\t\tif (updateDims(chartArea, params, layout)) {\r\n\t\t\tchanged = true;\r\n\t\t\tif (refitBoxes.length) {\r\n\t\t\t\t// Dimensions changed and there were non full width boxes before this\r\n\t\t\t\t// -> we have to refit those\r\n\t\t\t\trefit = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!box.fullWidth) { // fullWidth boxes don't need to be re-fitted in any case\r\n\t\t\trefitBoxes.push(layout);\r\n\t\t}\r\n\t}\r\n\r\n\treturn refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;\r\n}\r\n\r\nfunction placeBoxes(boxes, chartArea, params) {\r\n\tvar userPadding = params.padding;\r\n\tvar x = chartArea.x;\r\n\tvar y = chartArea.y;\r\n\tvar i, ilen, layout, box;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\t\tif (layout.horizontal) {\r\n\t\t\tbox.left = box.fullWidth ? userPadding.left : chartArea.left;\r\n\t\t\tbox.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;\r\n\t\t\tbox.top = y;\r\n\t\t\tbox.bottom = y + box.height;\r\n\t\t\tbox.width = box.right - box.left;\r\n\t\t\ty = box.bottom;\r\n\t\t} else {\r\n\t\t\tbox.left = x;\r\n\t\t\tbox.right = x + box.width;\r\n\t\t\tbox.top = chartArea.top;\r\n\t\t\tbox.bottom = chartArea.top + chartArea.h;\r\n\t\t\tbox.height = box.bottom - box.top;\r\n\t\t\tx = box.right;\r\n\t\t}\r\n\t}\r\n\r\n\tchartArea.x = x;\r\n\tchartArea.y = y;\r\n}\r\n\r\ncore_defaults._set('global', {\r\n\tlayout: {\r\n\t\tpadding: {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * @interface ILayoutItem\r\n * @prop {string} position - The position of the item in the chart layout. Possible values are\r\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\r\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\r\n * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\r\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\r\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\r\n * @prop {function} getPadding - Returns an object with padding on the edges\r\n * @prop {number} width - Width of item. Must be valid after update()\r\n * @prop {number} height - Height of item. Must be valid after update()\r\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\r\n */\r\n\r\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\r\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\r\n// It is this service's responsibility of carrying out that layout.\r\nvar core_layouts = {\r\n\tdefaults: {},\r\n\r\n\t/**\r\n\t * Register a box to a chart.\r\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\r\n\t * @param {Chart} chart - the chart to use\r\n\t * @param {ILayoutItem} item - the item to add to be layed out\r\n\t */\r\n\taddBox: function(chart, item) {\r\n\t\tif (!chart.boxes) {\r\n\t\t\tchart.boxes = [];\r\n\t\t}\r\n\r\n\t\t// initialize item with default values\r\n\t\titem.fullWidth = item.fullWidth || false;\r\n\t\titem.position = item.position || 'top';\r\n\t\titem.weight = item.weight || 0;\r\n\t\titem._layers = item._layers || function() {\r\n\t\t\treturn [{\r\n\t\t\t\tz: 0,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\titem.draw.apply(item, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t};\r\n\r\n\t\tchart.boxes.push(item);\r\n\t},\r\n\r\n\t/**\r\n\t * Remove a layoutItem from a chart\r\n\t * @param {Chart} chart - the chart to remove the box from\r\n\t * @param {ILayoutItem} layoutItem - the item to remove from the layout\r\n\t */\r\n\tremoveBox: function(chart, layoutItem) {\r\n\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\r\n\t\tif (index !== -1) {\r\n\t\t\tchart.boxes.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Sets (or updates) options on the given `item`.\r\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\r\n\t * @param {ILayoutItem} item - the item to configure with the given options\r\n\t * @param {object} options - the new item options.\r\n\t */\r\n\tconfigure: function(chart, item, options) {\r\n\t\tvar props = ['fullWidth', 'position', 'weight'];\r\n\t\tvar ilen = props.length;\r\n\t\tvar i = 0;\r\n\t\tvar prop;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tprop = props[i];\r\n\t\t\tif (options.hasOwnProperty(prop)) {\r\n\t\t\t\titem[prop] = options[prop];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Fits boxes of the given chart into the given size by having each box measure itself\r\n\t * then running a fitting algorithm\r\n\t * @param {Chart} chart - the chart\r\n\t * @param {number} width - the width to fit into\r\n\t * @param {number} height - the height to fit into\r\n\t */\r\n\tupdate: function(chart, width, height) {\r\n\t\tif (!chart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar layoutOptions = chart.options.layout || {};\r\n\t\tvar padding = helpers$1.options.toPadding(layoutOptions.padding);\r\n\r\n\t\tvar availableWidth = width - padding.width;\r\n\t\tvar availableHeight = height - padding.height;\r\n\t\tvar boxes = buildLayoutBoxes(chart.boxes);\r\n\t\tvar verticalBoxes = boxes.vertical;\r\n\t\tvar horizontalBoxes = boxes.horizontal;\r\n\r\n\t\t// Essentially we now have any number of boxes on each of the 4 sides.\r\n\t\t// Our canvas looks like the following.\r\n\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\r\n\t\t// B1 is the bottom axis\r\n\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\r\n\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\r\n\t\t// an error will be thrown.\r\n\t\t//\r\n\t\t// |----------------------------------------------------|\r\n\t\t// | T1 (Full Width) |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// | | | T2 | |\r\n\t\t// | |----|-------------------------------------|----|\r\n\t\t// | | | C1 | | C2 | |\r\n\t\t// | | |----| |----| |\r\n\t\t// | | | | |\r\n\t\t// | L1 | L2 | ChartArea (C0) | R1 |\r\n\t\t// | | | | |\r\n\t\t// | | |----| |----| |\r\n\t\t// | | | C3 | | C4 | |\r\n\t\t// | |----|-------------------------------------|----|\r\n\t\t// | | | B1 | |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// | B2 (Full Width) |\r\n\t\t// |----------------------------------------------------|\r\n\t\t//\r\n\r\n\t\tvar params = Object.freeze({\r\n\t\t\touterWidth: width,\r\n\t\t\touterHeight: height,\r\n\t\t\tpadding: padding,\r\n\t\t\tavailableWidth: availableWidth,\r\n\t\t\tvBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,\r\n\t\t\thBoxMaxHeight: availableHeight / 2\r\n\t\t});\r\n\t\tvar chartArea = extend({\r\n\t\t\tmaxPadding: extend({}, padding),\r\n\t\t\tw: availableWidth,\r\n\t\t\th: availableHeight,\r\n\t\t\tx: padding.left,\r\n\t\t\ty: padding.top\r\n\t\t}, padding);\r\n\r\n\t\tsetLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\r\n\r\n\t\t// First fit vertical boxes\r\n\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\r\n\t\t// Then fit horizontal boxes\r\n\t\tif (fitBoxes(horizontalBoxes, chartArea, params)) {\r\n\t\t\t// if the area changed, re-fit vertical boxes\r\n\t\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\t\t}\r\n\r\n\t\thandleMaxPadding(chartArea);\r\n\r\n\t\t// Finally place the boxes to correct coordinates\r\n\t\tplaceBoxes(boxes.leftAndTop, chartArea, params);\r\n\r\n\t\t// Move to opposite side of chart\r\n\t\tchartArea.x += chartArea.w;\r\n\t\tchartArea.y += chartArea.h;\r\n\r\n\t\tplaceBoxes(boxes.rightAndBottom, chartArea, params);\r\n\r\n\t\tchart.chartArea = {\r\n\t\t\tleft: chartArea.left,\r\n\t\t\ttop: chartArea.top,\r\n\t\t\tright: chartArea.left + chartArea.w,\r\n\t\t\tbottom: chartArea.top + chartArea.h\r\n\t\t};\r\n\r\n\t\t// Finally update boxes in chartArea (radial scale for example)\r\n\t\thelpers$1.each(boxes.chartArea, function(layout) {\r\n\t\t\tvar box = layout.box;\r\n\t\t\textend(box, chart.chartArea);\r\n\t\t\tbox.update(chartArea.w, chartArea.h);\r\n\t\t});\r\n\t}\r\n};\n\n/**\r\n * Platform fallback implementation (minimal).\r\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\r\n */\r\n\r\nvar platform_basic = {\r\n\tacquireContext: function(item) {\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\treturn item && item.getContext('2d') || null;\r\n\t}\r\n};\n\nvar platform_dom = \"/*\\r\\n * DOM element rendering detection\\r\\n * https://davidwalsh.name/detect-node-insertion\\r\\n */\\r\\n@keyframes chartjs-render-animation {\\r\\n\\tfrom { opacity: 0.99; }\\r\\n\\tto { opacity: 1; }\\r\\n}\\r\\n\\r\\n.chartjs-render-monitor {\\r\\n\\tanimation: chartjs-render-animation 0.001s;\\r\\n}\\r\\n\\r\\n/*\\r\\n * DOM element resizing detection\\r\\n * https://github.com/marcj/css-element-queries\\r\\n */\\r\\n.chartjs-size-monitor,\\r\\n.chartjs-size-monitor-expand,\\r\\n.chartjs-size-monitor-shrink {\\r\\n\\tposition: absolute;\\r\\n\\tdirection: ltr;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n\\tright: 0;\\r\\n\\tbottom: 0;\\r\\n\\toverflow: hidden;\\r\\n\\tpointer-events: none;\\r\\n\\tvisibility: hidden;\\r\\n\\tz-index: -1;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-expand > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 1000000px;\\r\\n\\theight: 1000000px;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-shrink > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 200%;\\r\\n\\theight: 200%;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\";\n\nvar platform_dom$1 = /*#__PURE__*/Object.freeze({\n__proto__: null,\n'default': platform_dom\n});\n\nvar stylesheet = getCjsExportFromNamespace(platform_dom$1);\n\nvar EXPANDO_KEY = '$chartjs';\r\nvar CSS_PREFIX = 'chartjs-';\r\nvar CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\r\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\r\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\r\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\r\n\r\n/**\r\n * DOM event types -> Chart.js event types.\r\n * Note: only events with different types are mapped.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\r\n */\r\nvar EVENT_TYPES = {\r\n\ttouchstart: 'mousedown',\r\n\ttouchmove: 'mousemove',\r\n\ttouchend: 'mouseup',\r\n\tpointerenter: 'mouseenter',\r\n\tpointerdown: 'mousedown',\r\n\tpointermove: 'mousemove',\r\n\tpointerup: 'mouseup',\r\n\tpointerleave: 'mouseout',\r\n\tpointerout: 'mouseout'\r\n};\r\n\r\n/**\r\n * The \"used\" size is the final value of a dimension property after all calculations have\r\n * been performed. This method uses the computed style of `element` but returns undefined\r\n * if the computed style is not expressed in pixels. That can happen in some cases where\r\n * `element` has a size relative to its parent and this last one is not yet displayed,\r\n * for example because of `display: none` on a parent node.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\r\n * @returns {number} Size in pixels or undefined if unknown.\r\n */\r\nfunction readUsedSize(element, property) {\r\n\tvar value = helpers$1.getStyle(element, property);\r\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\r\n\treturn matches ? Number(matches[1]) : undefined;\r\n}\r\n\r\n/**\r\n * Initializes the canvas style and render size without modifying the canvas display size,\r\n * since responsiveness is handled by the controller.resize() method. The config is used\r\n * to determine the aspect ratio to apply in case no explicit height has been specified.\r\n */\r\nfunction initCanvas(canvas, config) {\r\n\tvar style = canvas.style;\r\n\r\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\r\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\r\n\tvar renderHeight = canvas.getAttribute('height');\r\n\tvar renderWidth = canvas.getAttribute('width');\r\n\r\n\t// Chart.js modifies some canvas values that we want to restore on destroy\r\n\tcanvas[EXPANDO_KEY] = {\r\n\t\tinitial: {\r\n\t\t\theight: renderHeight,\r\n\t\t\twidth: renderWidth,\r\n\t\t\tstyle: {\r\n\t\t\t\tdisplay: style.display,\r\n\t\t\t\theight: style.height,\r\n\t\t\t\twidth: style.width\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Force canvas to display as block to avoid extra space caused by inline\r\n\t// elements, which would interfere with the responsive resize process.\r\n\t// https://github.com/chartjs/Chart.js/issues/2538\r\n\tstyle.display = style.display || 'block';\r\n\r\n\tif (renderWidth === null || renderWidth === '') {\r\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\r\n\t\tif (displayWidth !== undefined) {\r\n\t\t\tcanvas.width = displayWidth;\r\n\t\t}\r\n\t}\r\n\r\n\tif (renderHeight === null || renderHeight === '') {\r\n\t\tif (canvas.style.height === '') {\r\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\r\n\t\t\t// which one can be specified by the user but also by charts as default option\r\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\r\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\r\n\t\t} else {\r\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\r\n\t\t\tif (displayWidth !== undefined) {\r\n\t\t\t\tcanvas.height = displayHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn canvas;\r\n}\r\n\r\n/**\r\n * Detects support for options object argument in addEventListener.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\r\n * @private\r\n */\r\nvar supportsEventListenerOptions = (function() {\r\n\tvar supports = false;\r\n\ttry {\r\n\t\tvar options = Object.defineProperty({}, 'passive', {\r\n\t\t\t// eslint-disable-next-line getter-return\r\n\t\t\tget: function() {\r\n\t\t\t\tsupports = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('e', null, options);\r\n\t} catch (e) {\r\n\t\t// continue regardless of error\r\n\t}\r\n\treturn supports;\r\n}());\r\n\r\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\r\n// https://github.com/chartjs/Chart.js/issues/4287\r\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\r\n\r\nfunction addListener(node, type, listener) {\r\n\tnode.addEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction removeListener(node, type, listener) {\r\n\tnode.removeEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction createEvent(type, chart, x, y, nativeEvent) {\r\n\treturn {\r\n\t\ttype: type,\r\n\t\tchart: chart,\r\n\t\tnative: nativeEvent || null,\r\n\t\tx: x !== undefined ? x : null,\r\n\t\ty: y !== undefined ? y : null,\r\n\t};\r\n}\r\n\r\nfunction fromNativeEvent(event, chart) {\r\n\tvar type = EVENT_TYPES[event.type] || event.type;\r\n\tvar pos = helpers$1.getRelativePosition(event, chart);\r\n\treturn createEvent(type, chart, pos.x, pos.y, event);\r\n}\r\n\r\nfunction throttled(fn, thisArg) {\r\n\tvar ticking = false;\r\n\tvar args = [];\r\n\r\n\treturn function() {\r\n\t\targs = Array.prototype.slice.call(arguments);\r\n\t\tthisArg = thisArg || this;\r\n\r\n\t\tif (!ticking) {\r\n\t\t\tticking = true;\r\n\t\t\thelpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tticking = false;\r\n\t\t\t\tfn.apply(thisArg, args);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction createDiv(cls) {\r\n\tvar el = document.createElement('div');\r\n\tel.className = cls || '';\r\n\treturn el;\r\n}\r\n\r\n// Implementation based on https://github.com/marcj/css-element-queries\r\nfunction createResizer(handler) {\r\n\tvar maxSize = 1000000;\r\n\r\n\t// NOTE(SB) Don't use innerHTML because it could be considered unsafe.\r\n\t// https://github.com/chartjs/Chart.js/issues/5902\r\n\tvar resizer = createDiv(CSS_SIZE_MONITOR);\r\n\tvar expand = createDiv(CSS_SIZE_MONITOR + '-expand');\r\n\tvar shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\r\n\r\n\texpand.appendChild(createDiv());\r\n\tshrink.appendChild(createDiv());\r\n\r\n\tresizer.appendChild(expand);\r\n\tresizer.appendChild(shrink);\r\n\tresizer._reset = function() {\r\n\t\texpand.scrollLeft = maxSize;\r\n\t\texpand.scrollTop = maxSize;\r\n\t\tshrink.scrollLeft = maxSize;\r\n\t\tshrink.scrollTop = maxSize;\r\n\t};\r\n\r\n\tvar onScroll = function() {\r\n\t\tresizer._reset();\r\n\t\thandler();\r\n\t};\r\n\r\n\taddListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\r\n\taddListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\r\n\r\n\treturn resizer;\r\n}\r\n\r\n// https://davidwalsh.name/detect-node-insertion\r\nfunction watchForRender(node, handler) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\tvar proxy = expando.renderProxy = function(e) {\r\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\r\n\t\t\thandler();\r\n\t\t}\r\n\t};\r\n\r\n\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\taddListener(node, type, proxy);\r\n\t});\r\n\r\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\r\n\t// is removed then added back immediately (same animation frame?). Accessing the\r\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\r\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\r\n\t// https://github.com/chartjs/Chart.js/issues/4737\r\n\texpando.reflow = !!node.offsetParent;\r\n\r\n\tnode.classList.add(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction unwatchForRender(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar proxy = expando.renderProxy;\r\n\r\n\tif (proxy) {\r\n\t\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\t\tremoveListener(node, type, proxy);\r\n\t\t});\r\n\r\n\t\tdelete expando.renderProxy;\r\n\t}\r\n\r\n\tnode.classList.remove(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction addResizeListener(node, listener, chart) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\r\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\r\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = chart.options.maintainAspectRatio && node.parentNode;\r\n\t\t\tvar w = container ? container.clientWidth : 0;\r\n\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\tif (container && container.clientWidth < w && chart.canvas) {\r\n\t\t\t\t// If the container size shrank during chart resize, let's assume\r\n\t\t\t\t// scrollbar appeared. So we resize again with the scrollbar visible -\r\n\t\t\t\t// effectively making chart smaller and the scrollbar hidden again.\r\n\t\t\t\t// Because we are inside `throttled`, and currently `ticking`, scroll\r\n\t\t\t\t// events are ignored during this whole 2 resize process.\r\n\t\t\t\t// If we assumed wrong and something else happened, we are resizing\r\n\t\t\t\t// twice in a frame (potential performance issue)\r\n\t\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\t}\r\n\t\t}\r\n\t}));\r\n\r\n\t// The resizer needs to be attached to the node parent, so we first need to be\r\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\r\n\twatchForRender(node, function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = node.parentNode;\r\n\t\t\tif (container && container !== resizer.parentNode) {\r\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\r\n\t\t\t}\r\n\r\n\t\t\t// The container size might have changed, let's reset the resizer state.\r\n\t\t\tresizer._reset();\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction removeResizeListener(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar resizer = expando.resizer;\r\n\r\n\tdelete expando.resizer;\r\n\tunwatchForRender(node);\r\n\r\n\tif (resizer && resizer.parentNode) {\r\n\t\tresizer.parentNode.removeChild(resizer);\r\n\t}\r\n}\r\n\r\n/**\r\n * Injects CSS styles inline if the styles are not already present.\r\n * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the \\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".graph-container[data-v-f00ab88a] {\\n height: 300px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/assets/js/components/chartjs/LineChart.vue\"],\"names\":[],\"mappings\":\"AAgNA;EACA,aAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".dot-icon {\\n display: flex;\\n cursor: pointer;\\n padding: 8px 5px 5px 5px;\\n justify-content: flex-end;\\n}\\n.dot {\\n display: inline-block;\\n background: #a5acc1;\\n display: block;\\n width: 6px;\\n height: 6px;\\n border-radius: 50%;\\n position: relative;\\n}\\n.dot1 {\\n margin-right: 3px;\\n}\\n.dot2 {\\n margin-right: 3px;\\n}\\n.move-right {\\n -webkit-animation: moveright 0.2s;\\n animation: moveright 0.2s;\\n -webkit-animation-fill-mode: forwards;\\n animation-fill-mode: forwards;\\n}\\n.move-left {\\n -webkit-animation: moveleft 0.2s;\\n animation: moveleft 0.2s;\\n -webkit-animation-fill-mode: forwards;\\n animation-fill-mode: forwards;\\n}\\n@-webkit-keyframes moveleft {\\nfrom {\\n left: 0px;\\n}\\nto {\\n left: -18px;\\n}\\n}\\n@keyframes moveleft {\\nfrom {\\n left: 0px;\\n}\\nto {\\n left: -18px;\\n}\\n}\\n@-webkit-keyframes moveright {\\nfrom {\\n left: 0px;\\n}\\nto {\\n left: 18px;\\n}\\n}\\n@keyframes moveright {\\nfrom {\\n left: 0px;\\n}\\nto {\\n left: 18px;\\n}\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/assets/js/components/icon/DotIcon.vue\"],\"names\":[],\"mappings\":\"AA+BA;EACA,aAAA;EACA,eAAA;EACA,wBAAA;EACA,yBAAA;AACA;AAEA;EACA,qBAAA;EACA,mBAAA;EACA,cAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,kBAAA;AACA;AAEA;EACA,iBAAA;AACA;AAEA;EACA,iBAAA;AACA;AAEA;EACA,iCAAA;UAAA,yBAAA;EACA,qCAAA;UAAA,6BAAA;AACA;AAEA;EACA,gCAAA;UAAA,wBAAA;EACA,qCAAA;UAAA,6BAAA;AACA;AAEA;AACA;IACA,SAAA;AACA;AACA;IACA,WAAA;AACA;AACA;AAPA;AACA;IACA,SAAA;AACA;AACA;IACA,WAAA;AACA;AACA;AAEA;AACA;IACA,SAAA;AACA;AACA;IACA,UAAA;AACA;AACA;AAPA;AACA;IACA,SAAA;AACA;AACA;IACA,UAAA;AACA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".tab[data-v-66c9f590] {\\n padding: 0 !important;\\n}\\n.tab-link[data-v-66c9f590] {\\n padding: 10px 30px;\\n display: block;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/assets/js/views/reports/layout/Index.vue\"],\"names\":[],\"mappings\":\"AA8FA;EACA,qBAAA;AACA;AAEA;EACA,kBAAA;EACA,cAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".update-description ul li {\\n list-style: disc !important;\\n margin-bottom: 4px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/assets/js/views/settings/UpdateAppSetting.vue\"],\"names\":[],\"mappings\":\"AA0WA;EACA,2BAAA;EACA,kBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (typeof btoa === 'function') {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n};","import { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nconst DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n const self = {\n config: Object.assign(Object.assign({}, defaultOptions), flatpickr.defaultConfig),\n l10n: English,\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self._createElement = createElement;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth(month = self.currentMonth, yr = self.currentYear) {\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n },\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n const config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1) {\n return;\n }\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n const daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n const defaultDate = self.config.minDate === undefined ||\n compareDates(new Date(), self.config.minDate) >= 0\n ? new Date()\n : new Date(self.config.minDate.getTime());\n const defaults = getDefaultHours(self.config);\n defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n self.selectedDates = [defaultDate];\n self.latestSelectedDateObj = defaultDate;\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n const prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n let hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n const limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n const limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (limitMaxHours) {\n const maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n const minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n minutes = minTime.getMinutes();\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n setHours(hours, minutes, seconds);\n }\n function setHoursFromDate(dateObj) {\n const date = dateObj || self.latestSelectedDateObj;\n if (date) {\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n }\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n function onYearInput(event) {\n const eventTarget = getEventTarget(event);\n const year = parseInt(eventTarget.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach((ev) => bind(element, ev, handler, options));\n if (element instanceof Array)\n return element.forEach((el) => bind(el, event, handler, options));\n element.addEventListener(event, handler, options);\n self._handlers.push({\n remove: () => element.removeEventListener(event, handler),\n });\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach((evt) => {\n Array.prototype.forEach.call(self.element.querySelectorAll(`[data-${evt}]`), (el) => bind(el, \"click\", self[evt]));\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n const debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", (e) => {\n if (self.config.mode === \"range\")\n onMouseOver(getEventTarget(e));\n });\n bind(window.document.body, \"keydown\", onKeyDown);\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", documentClick);\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"click\", onMonthNavClick);\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"click\", selectDate);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n const selText = (e) => getEventTarget(e).select();\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"click\", timeIncrement);\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", () => self.secondElement && self.secondElement.select());\n if (self.amPM !== undefined) {\n bind(self.amPM, \"click\", (e) => {\n updateTime(e);\n triggerChange();\n });\n }\n }\n if (self.config.allowInput) {\n bind(self._input, \"blur\", onBlur);\n }\n }\n function jumpToDate(jumpDate, triggerChange) {\n const jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n const oldYear = self.currentYear;\n const oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n function timeIncrement(e) {\n const eventTarget = getEventTarget(e);\n if (~eventTarget.className.indexOf(\"arrow\"))\n incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n function incrementNumInput(e, delta, inputElem) {\n const target = e && getEventTarget(e);\n const input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n const event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n const fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n const { weekWrapper, weekNumbers } = buildWeeks();\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n const customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n const wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, dayNumber, i) {\n const dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n dayNumber % 7 === 1) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"\" + self.config.getWeek(date) + \"\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n const startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n const endMonth = delta > 0 ? self.config.showMonths : -1;\n for (let m = startMonth; m != endMonth; m += delta) {\n const month = self.daysContainer.children[m];\n const startIndex = delta > 0 ? 0 : month.children.length - 1;\n const endIndex = delta > 0 ? month.children.length : -1;\n for (let i = startIndex; i != endIndex; i += delta) {\n const c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n const givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n const endMonth = delta > 0 ? self.config.showMonths : -1;\n const loopDelta = delta > 0 ? 1 : -1;\n for (let m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n const month = self.daysContainer.children[m];\n const startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n const numMonthDays = month.children.length;\n for (let i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n const c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n const dayFocused = isInView(document.activeElement || document.body);\n const startElem = current !== undefined\n ? current\n : dayFocused\n ? document.activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined) {\n self._input.focus();\n }\n else if (!dayFocused) {\n focusOnDayElem(startElem);\n }\n else {\n getNextAvailableDay(startElem, offset);\n }\n }\n function buildMonthDays(year, month) {\n const firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n const prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n const daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n let dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n for (let dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n const dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n const frag = document.createDocumentFragment();\n for (let i = 0; i < self.config.showMonths; i++) {\n const d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n const shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (let i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n const month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n const container = createElement(\"div\", \"flatpickr-month\");\n const monthNavFragment = window.document.createDocumentFragment();\n let monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n bind(self.monthsDropdownContainer, \"change\", (e) => {\n const target = getEventTarget(e);\n const selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n const yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n const yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n const currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container,\n yearElement,\n monthElement,\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (let m = self.config.showMonths; m--;) {\n const month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: () => self.__hidePrevMonthArrow,\n set(bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n },\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: () => self.__hideNextMonthArrow,\n set(bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n },\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n const defaults = getDefaultHours(self.config);\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n const separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n const hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel,\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n const minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel,\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? defaults.hours\n : military2ampm(defaults.hours));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : defaults.minutes);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.hourElement.setAttribute(\"maxlength\", \"2\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.minuteElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n const secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : defaults.seconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.secondElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (let i = self.config.showMonths; i--;) {\n const container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n if (!self.weekdayContainer) {\n return;\n }\n const firstDayOfWeek = self.l10n.firstDayOfWeek;\n let weekdays = [...self.l10n.weekdays.shorthand];\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = [\n ...weekdays.splice(firstDayOfWeek, weekdays.length),\n ...weekdays.splice(0, firstDayOfWeek),\n ];\n }\n for (let i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = `\n \n ${weekdays.join(\"\")}\n \n `;\n }\n }\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n const weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n const weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper,\n weekNumbers,\n };\n }\n function changeMonth(value, isOffset = true) {\n const delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent = true, toInitial = true) {\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n if (self.config.enableTime === true) {\n const { hours, minutes, seconds } = getDefaultHours(self.config);\n setHours(hours, minutes, seconds);\n }\n self.redraw();\n if (triggerChangeEvent)\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (let i = self._handlers.length; i--;) {\n self._handlers[i].remove();\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n const wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach((k) => {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n if (self.config.appendTo && self.config.appendTo.contains(elem))\n return true;\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n const eventTarget = getEventTarget(e);\n const isCalendarElement = isCalendarElem(eventTarget);\n const isInput = eventTarget === self.input ||\n eventTarget === self.altInput ||\n self.element.contains(eventTarget) ||\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n const lostFocus = e.type === \"blur\"\n ? isInput &&\n e.relatedTarget &&\n !isCalendarElem(e.relatedTarget)\n : !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n const isIgnored = !self.config.ignoredFocusElements.some((elem) => elem.contains(eventTarget));\n if (lostFocus && isIgnored) {\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined &&\n self.input.value !== \"\" &&\n self.input.value !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config &&\n self.config.mode === \"range\" &&\n self.selectedDates.length === 1) {\n self.clear(false);\n self.redraw();\n }\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n const newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless = true) {\n var _a;\n const dateToCheck = self.parseDate(date, undefined, timeless);\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (!self.config.enable && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n const bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n for (let i = 0, d; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck))\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n return bool;\n else if (typeof d === \"string\") {\n const parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onBlur(e) {\n const isInput = e.target === self._input;\n if (isInput &&\n (self.selectedDates.length > 0 || self._input.value.length > 0) &&\n !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n }\n function onKeyDown(e) {\n const eventTarget = getEventTarget(e);\n const isInput = self.config.wrap\n ? element.contains(eventTarget)\n : eventTarget === self._input;\n const allowInput = self.config.allowInput;\n const allowKeydown = self.isOpen && (!allowInput || !isInput);\n const allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, eventTarget === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n return eventTarget.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(eventTarget) ||\n allowKeydown ||\n allowInlineKeydown) {\n const isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(eventTarget);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27:\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (document.activeElement && isInView(document.activeElement)))) {\n const delta = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta);\n else {\n e.stopPropagation();\n changeMonth(delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n const delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer &&\n eventTarget.$i !== undefined) ||\n eventTarget === self.input ||\n eventTarget === self.altInput) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (eventTarget === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n const elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter((x) => x);\n const i = elems.indexOf(eventTarget);\n if (i !== -1) {\n const target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(eventTarget) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(eventTarget)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem) {\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(\"flatpickr-day\") ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n const hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n let containsDisabled = false;\n let minRange = 0, maxRange = 0;\n for (let t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n for (let m = 0; m < self.config.showMonths; m++) {\n const month = self.daysContainer.children[m];\n for (let i = 0, l = month.children.length; i < l; i++) {\n const dayElem = month.children[i], date = dayElem.dateObj;\n const timestamp = date.getTime();\n const outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach((c) => {\n dayElem.classList.remove(c);\n });\n continue;\n }\n else if (containsDisabled && !outOfRange)\n continue;\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach((c) => {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n }\n }\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function open(e, positionElement = self._positionElement) {\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n const eventTarget = getEventTarget(e);\n if (eventTarget) {\n eventTarget.blur();\n }\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n else if (self._input.disabled || self.config.inline) {\n return;\n }\n const wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(() => self.hourElement.select(), 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return (date) => {\n const dateObj = (self.config[`_${type}Date`] = self.parseDate(date, self.config.dateFormat));\n const inverseDateObj = self.config[`_${type === \"min\" ? \"max\" : \"min\"}Date`];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter((d) => isEnabled(d));\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n const boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"allowInvalidPreload\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n const userConfig = Object.assign(Object.assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n const formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: () => self.config._enable,\n set: (dates) => {\n self.config._enable = parseDateRules(dates);\n },\n });\n Object.defineProperty(self.config, \"disable\", {\n get: () => self.config._disable,\n set: (dates) => {\n self.config._disable = parseDateRules(dates);\n },\n });\n const timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n const defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n const defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + ` h:i${userConfig.enableSeconds ? \":S\" : \"\"} K`;\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: () => self.config._minDate,\n set: minMaxDateSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: () => self.config._maxDate,\n set: minMaxDateSetter(\"max\"),\n });\n const minMaxTimeSetter = (type) => (val) => {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n };\n Object.defineProperty(self.config, \"minTime\", {\n get: () => self.config._minTime,\n set: minMaxTimeSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: () => self.config._maxTime,\n set: minMaxTimeSetter(\"max\"),\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (let i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter((hook) => self.config[hook] !== undefined).forEach((hook) => {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (let i = 0; i < self.config.plugins.length; i++) {\n const pluginConf = self.config.plugins[i](self) || {};\n for (const key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n getInputElem().className + \" \" + self.config.altInputClass;\n }\n triggerEvent(\"onParseConfig\");\n }\n function getInputElem() {\n return self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(`flatpickr: invalid locale ${self.config.locale}`));\n self.l10n = Object.assign(Object.assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.K = `(${self.l10n.amPM[0]}|${self.l10n.amPM[1]}|${self.l10n.amPM[0].toLowerCase()}|${self.l10n.amPM[1].toLowerCase()})`;\n const userConfig = Object.assign(Object.assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (typeof self.config.position === \"function\") {\n return void self.config.position(self, customPositionElement);\n }\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n const positionElement = customPositionElement || self._positionElement;\n const calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, ((acc, child) => acc + child.offsetHeight), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n const top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n let left = window.pageXOffset + inputBounds.left;\n let isCenter = false;\n let isRight = false;\n if (configPosHorizontal === \"center\") {\n left -= (calendarWidth - inputBounds.width) / 2;\n isCenter = true;\n }\n else if (configPosHorizontal === \"right\") {\n left -= calendarWidth - inputBounds.width;\n isRight = true;\n }\n toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n const right = window.document.body.offsetWidth -\n (window.pageXOffset + inputBounds.right);\n const rightMost = left + calendarWidth > window.document.body.offsetWidth;\n const centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = `${top}px`;\n if (!rightMost) {\n self.calendarContainer.style.left = `${left}px`;\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = `${right}px`;\n }\n else {\n const doc = getDocumentStyleSheet();\n if (doc === undefined)\n return;\n const bodyWidth = window.document.body.offsetWidth;\n const centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n const centerBefore = \".flatpickr-calendar.centerMost:before\";\n const centerAfter = \".flatpickr-calendar.centerMost:after\";\n const centerIndex = doc.cssRules.length;\n const centerStyle = `{left:${inputBounds.left}px;right:auto;}`;\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(`${centerBefore},${centerAfter}${centerStyle}`, centerIndex);\n self.calendarContainer.style.left = `${centerLeft}px`;\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function getDocumentStyleSheet() {\n let editableSheet = null;\n for (let i = 0; i < document.styleSheets.length; i++) {\n const sheet = document.styleSheets[i];\n try {\n sheet.cssRules;\n }\n catch (err) {\n continue;\n }\n editableSheet = sheet;\n break;\n }\n return editableSheet != null ? editableSheet : createStyleSheet();\n }\n function createStyleSheet() {\n const style = document.createElement(\"style\");\n document.head.appendChild(style);\n return style.sheet;\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n buildMonthSwitch();\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n const isSelectable = (day) => day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n const t = findParent(getEventTarget(e), isSelectable);\n if (t === undefined)\n return;\n const target = t;\n const selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n const shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n const selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n const isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n const single = self.config.mode === \"single\" && !self.config.enableTime;\n const range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n const CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate],\n clickOpens: [\n () => {\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n else {\n self._input.removeEventListener(\"focus\", self.open);\n self._input.removeEventListener(\"click\", self.open);\n }\n },\n ],\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (const key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach((x) => x());\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach((x) => x());\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(true);\n }\n function setSelectedDate(inputDate, format) {\n let dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map((d) => self.parseDate(d, format));\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map((date) => self.parseDate(date, format));\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map((date) => self.parseDate(date, format));\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(`Invalid date supplied: ${JSON.stringify(inputDate)}`));\n self.selectedDates = (self.config.allowInvalidPreload\n ? dates\n : dates.filter((d) => d instanceof Date && isEnabled(d, false)));\n if (self.config.mode === \"range\")\n self.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n }\n function setDate(date, triggerChange = false, format = self.config.dateFormat) {\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate(undefined, triggerChange);\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map((rule) => {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined),\n };\n return rule;\n })\n .filter((x) => x);\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n const preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n }\n function setupInputs() {\n self.input = getInputElem();\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n const inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n if (self.input.getAttribute(\"step\"))\n self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", (e) => {\n self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n if (self.config === undefined)\n return;\n const hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (let i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n const e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (let i = 0; i < self.selectedDates.length; i++) {\n if (compareDates(self.selectedDates[i], date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach((yearElement, i) => {\n const d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(format) {\n return self.selectedDates\n .map((dObj) => self.formatDate(dObj, format))\n .filter((d, i, arr) => self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i)\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n function updateValue(triggerChange = true) {\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n const eventTarget = getEventTarget(e);\n const isPrevMonth = self.prevMonthNav.contains(eventTarget);\n const isNextMonth = self.nextMonthNav.contains(eventTarget);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(eventTarget) >= 0) {\n eventTarget.select();\n }\n else if (eventTarget.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (eventTarget.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n const isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n const min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n let newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n const isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n}\nfunction _flatpickr(nodeList, config) {\n const nodes = Array.prototype.slice\n .call(nodeList)\n .filter((x) => x instanceof HTMLElement);\n const instances = [];\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n}\nvar flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n en: Object.assign({}, English),\n default: Object.assign({}, English),\n};\nflatpickr.localize = (l10n) => {\n flatpickr.l10ns.default = Object.assign(Object.assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = (config) => {\n flatpickr.defaultConfig = Object.assign(Object.assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n}\nDate.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","export const english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: (nth) => {\n const s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n};\nexport default english;\n","export const HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n];\nexport const defaults = {\n _disable: [],\n allowInput: false,\n allowInvalidPreload: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n autoFillDefaultTime: true,\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enableSeconds: false,\n enableTime: false,\n errorHandler: (err) => typeof console !== \"undefined\" && console.warn(err),\n getWeek: (givenDate) => {\n const date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n var week1 = new Date(date.getFullYear(), 0, 4);\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false,\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport const createDateFormatter = ({ config = defaults, l10n = english, isMobile = false, }) => (dateObj, frmt, overrideLocale) => {\n const locale = overrideLocale || l10n;\n if (config.formatDate !== undefined && !isMobile) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map((c, i, arr) => formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\")\n .join(\"\");\n};\nexport const createDateParser = ({ config = defaults, l10n = english }) => (date, givenFormat, timeless, customLocale) => {\n if (date !== 0 && !date)\n return undefined;\n const locale = customLocale || l10n;\n let parsedDate;\n const dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined)\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n const format = givenFormat || (config || defaults).dateFormat;\n const datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr))\n parsedDate = new Date(date);\n else if (config && config.parseDate)\n parsedDate = config.parseDate(date, format);\n else {\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n let matched, ops = [];\n for (let i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n const token = format[i];\n const isBackSlash = token === \"\\\\\";\n const escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token] && !escaped) {\n regexStr += tokenRegex[token];\n const match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token],\n val: match[++matchIndex],\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\";\n ops.forEach(({ fn, val }) => (parsedDate = fn(parsedDate, val, locale) || parsedDate));\n }\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(`Invalid date provided: ${dateOrig}`));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n};\nexport function compareDates(date1, date2, timeless = true) {\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n return (3600 * (date1.getHours() - date2.getHours()) +\n 60 * (date1.getMinutes() - date2.getMinutes()) +\n date1.getSeconds() -\n date2.getSeconds());\n}\nexport const isBetween = (ts, ts1, ts2) => {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport const duration = {\n DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n let hours = config.defaultHour;\n let minutes = config.defaultMinute;\n let seconds = config.defaultSeconds;\n if (config.minDate !== undefined) {\n const minHour = config.minDate.getHours();\n const minMinutes = config.minDate.getMinutes();\n const minSeconds = config.minDate.getSeconds();\n if (hours < minHour) {\n hours = minHour;\n }\n if (hours === minHour && minutes < minMinutes) {\n minutes = minMinutes;\n }\n if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n seconds = config.minDate.getSeconds();\n }\n if (config.maxDate !== undefined) {\n const maxHr = config.maxDate.getHours();\n const maxMinutes = config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = config.maxDate.getSeconds();\n }\n return { hours, minutes, seconds };\n}\n","export function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n const e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n}\nexport function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n const wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (const key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n}\nexport function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n const path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n}\n","import { int, pad } from \"../utils\";\nconst doNothing = () => undefined;\nexport const monthToStr = (monthNumber, shorthand, locale) => locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\nexport const revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: (dateObj, hour) => {\n dateObj.setHours(parseFloat(hour));\n },\n H: (dateObj, hour) => {\n dateObj.setHours(parseFloat(hour));\n },\n J: (dateObj, day) => {\n dateObj.setDate(parseFloat(day));\n },\n K: (dateObj, amPM, locale) => {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: (dateObj, seconds) => {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: (_, unixSeconds) => new Date(parseFloat(unixSeconds) * 1000),\n W: function (dateObj, weekNum, locale) {\n const weekNumber = parseInt(weekNum);\n const date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: (dateObj, year) => {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: (_, ISODate) => new Date(ISODate),\n d: (dateObj, day) => {\n dateObj.setDate(parseFloat(day));\n },\n h: (dateObj, hour) => {\n dateObj.setHours(parseFloat(hour));\n },\n i: (dateObj, minutes) => {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: (dateObj, day) => {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: (dateObj, month) => {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: (dateObj, month) => {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: (dateObj, seconds) => {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: (_, unixMillSeconds) => new Date(parseFloat(unixMillSeconds)),\n w: doNothing,\n y: (dateObj, year) => {\n dateObj.setFullYear(2000 + parseFloat(year));\n },\n};\nexport const tokenRegex = {\n D: \"(\\\\w+)\",\n F: \"(\\\\w+)\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"(\\\\w+)\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"(\\\\w+)\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\",\n};\nexport const formats = {\n Z: (date) => date.toISOString(),\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n H: (date) => pad(date.getHours()),\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n K: (date, locale) => locale.amPM[int(date.getHours() > 11)],\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n S: (date) => pad(date.getSeconds()),\n U: (date) => date.getTime() / 1000,\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n Y: (date) => pad(date.getFullYear(), 4),\n d: (date) => pad(date.getDate()),\n h: (date) => (date.getHours() % 12 ? date.getHours() % 12 : 12),\n i: (date) => pad(date.getMinutes()),\n j: (date) => date.getDate(),\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n m: (date) => pad(date.getMonth() + 1),\n n: (date) => date.getMonth() + 1,\n s: (date) => date.getSeconds(),\n u: (date) => date.getTime(),\n w: (date) => date.getDay(),\n y: (date) => String(date.getFullYear()).substring(2),\n};\n","export const pad = (number, length = 2) => `000${number}`.slice(length * -1);\nexport const int = (bool) => (bool === true ? 1 : 0);\nexport function debounce(fn, wait) {\n let t;\n return function () {\n clearTimeout(t);\n t = setTimeout(() => fn.apply(this, arguments), wait);\n };\n}\nexport const arrayify = (obj) => obj instanceof Array ? obj : [obj];\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n Object.assign = function (target, ...args) {\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n for (const source of args) {\n if (source) {\n Object.keys(source).forEach((key) => (target[key] = source[key]));\n }\n }\n return target;\n };\n}\n","(function () {\n var validator = new RegExp(\"^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$\", \"i\");\n\n function gen(count) {\n var out = \"\";\n for (var i=0; i elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces \";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n","import { render, staticRenderFns } from \"./SwSelect.vue?vue&type=template&id=401f8f6f&\"\nimport script from \"./SwSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./SwSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('401f8f6f')) {\n api.createRecord('401f8f6f', component.options)\n } else {\n api.reload('401f8f6f', component.options)\n }\n module.hot.accept(\"./SwSelect.vue?vue&type=template&id=401f8f6f&\", function () {\n api.rerender('401f8f6f', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"node_modules/@bytefury/spacewind/src/components/sw-select/SwSelect.vue\"\nexport default component.exports","\n\n\n","import { render, staticRenderFns } from \"./SweetModal.vue?vue&type=template&id=7dbda72e&\"\nimport script from \"./SweetModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SweetModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SweetModal.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7dbda72e')) {\n api.createRecord('7dbda72e', component.options)\n } else {\n api.reload('7dbda72e', component.options)\n }\n module.hot.accept(\"./SweetModal.vue?vue&type=template&id=7dbda72e&\", function () {\n api.rerender('7dbda72e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"node_modules/sweet-modal-vue/src/components/SweetModal.vue\"\nexport default component.exports","\n\n\n\n\n","import { render, staticRenderFns } from \"./SweetModalTab.vue?vue&type=template&id=4e55f337&\"\nimport script from \"./SweetModalTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SweetModalTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('4e55f337')) {\n api.createRecord('4e55f337', component.options)\n } else {\n api.reload('4e55f337', component.options)\n }\n module.hot.accept(\"./SweetModalTab.vue?vue&type=template&id=4e55f337&\", function () {\n api.rerender('4e55f337', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"node_modules/sweet-modal-vue/src/components/SweetModalTab.vue\"\nexport default component.exports","\n\n\n\n\n","import { render, staticRenderFns } from \"./GlobalSearch.vue?vue&type=template&id=166b593c&scoped=true&\"\nimport script from \"./GlobalSearch.vue?vue&type=script&lang=js&\"\nexport * from \"./GlobalSearch.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlobalSearch.vue?vue&type=style&index=0&id=166b593c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"166b593c\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('166b593c')) {\n api.createRecord('166b593c', component.options)\n } else {\n api.reload('166b593c', component.options)\n }\n module.hot.accept(\"./GlobalSearch.vue?vue&type=template&id=166b593c&scoped=true&\", function () {\n api.rerender('166b593c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/GlobalSearch.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BaseCustomInput.vue?vue&type=template&id=3af75181&\"\nimport script from \"./BaseCustomInput.vue?vue&type=script&lang=js&\"\nexport * from \"./BaseCustomInput.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3af75181')) {\n api.createRecord('3af75181', component.options)\n } else {\n api.reload('3af75181', component.options)\n }\n module.hot.accept(\"./BaseCustomInput.vue?vue&type=template&id=3af75181&\", function () {\n api.rerender('3af75181', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/BaseCustomInput.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BaseCustomerSelect.vue?vue&type=template&id=2af9c582&\"\nimport script from \"./BaseCustomerSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./BaseCustomerSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2af9c582')) {\n api.createRecord('2af9c582', component.options)\n } else {\n api.reload('2af9c582', component.options)\n }\n module.hot.accept(\"./BaseCustomerSelect.vue?vue&type=template&id=2af9c582&\", function () {\n api.rerender('2af9c582', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/BaseCustomerSelect.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BaseDatePicker.vue?vue&type=template&id=199fa3e4&\"\nimport script from \"./BaseDatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./BaseDatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaseDatePicker.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('199fa3e4')) {\n api.createRecord('199fa3e4', component.options)\n } else {\n api.reload('199fa3e4', component.options)\n }\n module.hot.accept(\"./BaseDatePicker.vue?vue&type=template&id=199fa3e4&\", function () {\n api.rerender('199fa3e4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/BaseDatePicker.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BaseLoader.vue?vue&type=template&id=82d1a2ca&\"\nimport script from \"./BaseLoader.vue?vue&type=script&lang=js&\"\nexport * from \"./BaseLoader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaseLoader.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('82d1a2ca')) {\n api.createRecord('82d1a2ca', component.options)\n } else {\n api.reload('82d1a2ca', component.options)\n }\n module.hot.accept(\"./BaseLoader.vue?vue&type=template&id=82d1a2ca&\", function () {\n api.rerender('82d1a2ca', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/BaseLoader.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BasePage.vue?vue&type=template&id=46855f17&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('46855f17')) {\n api.createRecord('46855f17', component.options)\n } else {\n api.reload('46855f17', component.options)\n }\n module.hot.accept(\"./BasePage.vue?vue&type=template&id=46855f17&\", function () {\n api.rerender('46855f17', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/BasePage.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BaseTimePicker.vue?vue&type=template&id=75b8ec43&\"\nimport script from \"./BaseTimePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./BaseTimePicker.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('75b8ec43')) {\n api.createRecord('75b8ec43', component.options)\n } else {\n api.reload('75b8ec43', component.options)\n }\n module.hot.accept(\"./BaseTimePicker.vue?vue&type=template&id=75b8ec43&\", function () {\n api.rerender('75b8ec43', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/BaseTimePicker.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BackupModal.vue?vue&type=template&id=3f88d1bc&\"\nimport script from \"./BackupModal.vue?vue&type=script&lang=js&\"\nexport * from \"./BackupModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3f88d1bc')) {\n api.createRecord('3f88d1bc', component.options)\n } else {\n api.reload('3f88d1bc', component.options)\n }\n module.hot.accept(\"./BackupModal.vue?vue&type=template&id=3f88d1bc&\", function () {\n api.rerender('3f88d1bc', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/BackupModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BaseModal.vue?vue&type=template&id=7b6dbab3&\"\nimport script from \"./BaseModal.vue?vue&type=script&lang=js&\"\nexport * from \"./BaseModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7b6dbab3')) {\n api.createRecord('7b6dbab3', component.options)\n } else {\n api.reload('7b6dbab3', component.options)\n }\n module.hot.accept(\"./BaseModal.vue?vue&type=template&id=7b6dbab3&\", function () {\n api.rerender('7b6dbab3', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/BaseModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CategoryModal.vue?vue&type=template&id=75c2a0b4&\"\nimport script from \"./CategoryModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CategoryModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('75c2a0b4')) {\n api.createRecord('75c2a0b4', component.options)\n } else {\n api.reload('75c2a0b4', component.options)\n }\n module.hot.accept(\"./CategoryModal.vue?vue&type=template&id=75c2a0b4&\", function () {\n api.rerender('75c2a0b4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CategoryModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=22e1bc83&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('22e1bc83')) {\n api.createRecord('22e1bc83', component.options)\n } else {\n api.reload('22e1bc83', component.options)\n }\n module.hot.accept(\"./Index.vue?vue&type=template&id=22e1bc83&\", function () {\n api.rerender('22e1bc83', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/Index.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DateTimeType.vue?vue&type=template&id=77a216ea&\"\nimport script from \"./DateTimeType.vue?vue&type=script&lang=js&\"\nexport * from \"./DateTimeType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('77a216ea')) {\n api.createRecord('77a216ea', component.options)\n } else {\n api.reload('77a216ea', component.options)\n }\n module.hot.accept(\"./DateTimeType.vue?vue&type=template&id=77a216ea&\", function () {\n api.rerender('77a216ea', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/DateTimeType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DateType.vue?vue&type=template&id=d2216b06&\"\nimport script from \"./DateType.vue?vue&type=script&lang=js&\"\nexport * from \"./DateType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('d2216b06')) {\n api.createRecord('d2216b06', component.options)\n } else {\n api.reload('d2216b06', component.options)\n }\n module.hot.accept(\"./DateType.vue?vue&type=template&id=d2216b06&\", function () {\n api.rerender('d2216b06', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/DateType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DropdownType.vue?vue&type=template&id=01855540&\"\nimport script from \"./DropdownType.vue?vue&type=script&lang=js&\"\nexport * from \"./DropdownType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('01855540')) {\n api.createRecord('01855540', component.options)\n } else {\n api.reload('01855540', component.options)\n }\n module.hot.accept(\"./DropdownType.vue?vue&type=template&id=01855540&\", function () {\n api.rerender('01855540', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/DropdownType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./InputType.vue?vue&type=template&id=894e1b02&\"\nimport script from \"./InputType.vue?vue&type=script&lang=js&\"\nexport * from \"./InputType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('894e1b02')) {\n api.createRecord('894e1b02', component.options)\n } else {\n api.reload('894e1b02', component.options)\n }\n module.hot.accept(\"./InputType.vue?vue&type=template&id=894e1b02&\", function () {\n api.rerender('894e1b02', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/InputType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./NumberType.vue?vue&type=template&id=7890e7d8&\"\nimport script from \"./NumberType.vue?vue&type=script&lang=js&\"\nexport * from \"./NumberType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7890e7d8')) {\n api.createRecord('7890e7d8', component.options)\n } else {\n api.reload('7890e7d8', component.options)\n }\n module.hot.accept(\"./NumberType.vue?vue&type=template&id=7890e7d8&\", function () {\n api.rerender('7890e7d8', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/NumberType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./OptionsCreate.vue?vue&type=template&id=52449d15&\"\nimport script from \"./OptionsCreate.vue?vue&type=script&lang=js&\"\nexport * from \"./OptionsCreate.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('52449d15')) {\n api.createRecord('52449d15', component.options)\n } else {\n api.reload('52449d15', component.options)\n }\n module.hot.accept(\"./OptionsCreate.vue?vue&type=template&id=52449d15&\", function () {\n api.rerender('52449d15', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/OptionsCreate.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./PhoneType.vue?vue&type=template&id=1fdaf423&\"\nimport script from \"./PhoneType.vue?vue&type=script&lang=js&\"\nexport * from \"./PhoneType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1fdaf423')) {\n api.createRecord('1fdaf423', component.options)\n } else {\n api.reload('1fdaf423', component.options)\n }\n module.hot.accept(\"./PhoneType.vue?vue&type=template&id=1fdaf423&\", function () {\n api.rerender('1fdaf423', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/PhoneType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SwitchType.vue?vue&type=template&id=64faa8c3&\"\nimport script from \"./SwitchType.vue?vue&type=script&lang=js&\"\nexport * from \"./SwitchType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('64faa8c3')) {\n api.createRecord('64faa8c3', component.options)\n } else {\n api.reload('64faa8c3', component.options)\n }\n module.hot.accept(\"./SwitchType.vue?vue&type=template&id=64faa8c3&\", function () {\n api.rerender('64faa8c3', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/SwitchType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TextAreaType.vue?vue&type=template&id=2fcfe3a9&\"\nimport script from \"./TextAreaType.vue?vue&type=script&lang=js&\"\nexport * from \"./TextAreaType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2fcfe3a9')) {\n api.createRecord('2fcfe3a9', component.options)\n } else {\n api.reload('2fcfe3a9', component.options)\n }\n module.hot.accept(\"./TextAreaType.vue?vue&type=template&id=2fcfe3a9&\", function () {\n api.rerender('2fcfe3a9', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/TextAreaType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TimeType.vue?vue&type=template&id=0b2d1e9c&\"\nimport script from \"./TimeType.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0b2d1e9c')) {\n api.createRecord('0b2d1e9c', component.options)\n } else {\n api.reload('0b2d1e9c', component.options)\n }\n module.hot.accept(\"./TimeType.vue?vue&type=template&id=0b2d1e9c&\", function () {\n api.rerender('0b2d1e9c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/TimeType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UrlType.vue?vue&type=template&id=feb80038&\"\nimport script from \"./UrlType.vue?vue&type=script&lang=js&\"\nexport * from \"./UrlType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('feb80038')) {\n api.createRecord('feb80038', component.options)\n } else {\n api.reload('feb80038', component.options)\n }\n module.hot.accept(\"./UrlType.vue?vue&type=template&id=feb80038&\", function () {\n api.rerender('feb80038', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomField/types/UrlType.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomerModal.vue?vue&type=template&id=6dbd28c6&\"\nimport script from \"./CustomerModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomerModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6dbd28c6')) {\n api.createRecord('6dbd28c6', component.options)\n } else {\n api.reload('6dbd28c6', component.options)\n }\n module.hot.accept(\"./CustomerModal.vue?vue&type=template&id=6dbd28c6&\", function () {\n api.rerender('6dbd28c6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/CustomerModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./EstimateTemplate.vue?vue&type=template&id=47ca52bb&\"\nimport script from \"./EstimateTemplate.vue?vue&type=script&lang=js&\"\nexport * from \"./EstimateTemplate.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('47ca52bb')) {\n api.createRecord('47ca52bb', component.options)\n } else {\n api.reload('47ca52bb', component.options)\n }\n module.hot.accept(\"./EstimateTemplate.vue?vue&type=template&id=47ca52bb&\", function () {\n api.rerender('47ca52bb', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/EstimateTemplate.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./FileDiskModal.vue?vue&type=template&id=639ca5cb&\"\nimport script from \"./FileDiskModal.vue?vue&type=script&lang=js&\"\nexport * from \"./FileDiskModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('639ca5cb')) {\n api.createRecord('639ca5cb', component.options)\n } else {\n api.reload('639ca5cb', component.options)\n }\n module.hot.accept(\"./FileDiskModal.vue?vue&type=template&id=639ca5cb&\", function () {\n api.rerender('639ca5cb', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/FileDiskModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./InvoiceTemplate.vue?vue&type=template&id=7c4a4b44&\"\nimport script from \"./InvoiceTemplate.vue?vue&type=script&lang=js&\"\nexport * from \"./InvoiceTemplate.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7c4a4b44')) {\n api.createRecord('7c4a4b44', component.options)\n } else {\n api.reload('7c4a4b44', component.options)\n }\n module.hot.accept(\"./InvoiceTemplate.vue?vue&type=template&id=7c4a4b44&\", function () {\n api.rerender('7c4a4b44', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/InvoiceTemplate.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ItemModal.vue?vue&type=template&id=10fbf0b1&\"\nimport script from \"./ItemModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('10fbf0b1')) {\n api.createRecord('10fbf0b1', component.options)\n } else {\n api.reload('10fbf0b1', component.options)\n }\n module.hot.accept(\"./ItemModal.vue?vue&type=template&id=10fbf0b1&\", function () {\n api.rerender('10fbf0b1', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/ItemModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ItemUnitModal.vue?vue&type=template&id=639ed58d&\"\nimport script from \"./ItemUnitModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemUnitModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('639ed58d')) {\n api.createRecord('639ed58d', component.options)\n } else {\n api.reload('639ed58d', component.options)\n }\n module.hot.accept(\"./ItemUnitModal.vue?vue&type=template&id=639ed58d&\", function () {\n api.rerender('639ed58d', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/ItemUnitModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./MailTestModal.vue?vue&type=template&id=0b2fda1b&\"\nimport script from \"./MailTestModal.vue?vue&type=script&lang=js&\"\nexport * from \"./MailTestModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0b2fda1b')) {\n api.createRecord('0b2fda1b', component.options)\n } else {\n api.reload('0b2fda1b', component.options)\n }\n module.hot.accept(\"./MailTestModal.vue?vue&type=template&id=0b2fda1b&\", function () {\n api.rerender('0b2fda1b', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/MailTestModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./NoteModal.vue?vue&type=template&id=aba4729c&\"\nimport script from \"./NoteModal.vue?vue&type=script&lang=js&\"\nexport * from \"./NoteModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NoteModal.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('aba4729c')) {\n api.createRecord('aba4729c', component.options)\n } else {\n api.reload('aba4729c', component.options)\n }\n module.hot.accept(\"./NoteModal.vue?vue&type=template&id=aba4729c&\", function () {\n api.rerender('aba4729c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/NoteModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./PaymentModeModal.vue?vue&type=template&id=100f375d&\"\nimport script from \"./PaymentModeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PaymentModeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('100f375d')) {\n api.createRecord('100f375d', component.options)\n } else {\n api.reload('100f375d', component.options)\n }\n module.hot.accept(\"./PaymentModeModal.vue?vue&type=template&id=100f375d&\", function () {\n api.rerender('100f375d', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/PaymentModeModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SendEstimateModal.vue?vue&type=template&id=02ddded8&\"\nimport script from \"./SendEstimateModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SendEstimateModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('02ddded8')) {\n api.createRecord('02ddded8', component.options)\n } else {\n api.reload('02ddded8', component.options)\n }\n module.hot.accept(\"./SendEstimateModal.vue?vue&type=template&id=02ddded8&\", function () {\n api.rerender('02ddded8', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/SendEstimateModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SendInvoiceModal.vue?vue&type=template&id=90ff55be&\"\nimport script from \"./SendInvoiceModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SendInvoiceModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('90ff55be')) {\n api.createRecord('90ff55be', component.options)\n } else {\n api.reload('90ff55be', component.options)\n }\n module.hot.accept(\"./SendInvoiceModal.vue?vue&type=template&id=90ff55be&\", function () {\n api.rerender('90ff55be', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/SendInvoiceModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SendPaymentModal.vue?vue&type=template&id=9b71eb30&\"\nimport script from \"./SendPaymentModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SendPaymentModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9b71eb30')) {\n api.createRecord('9b71eb30', component.options)\n } else {\n api.reload('9b71eb30', component.options)\n }\n module.hot.accept(\"./SendPaymentModal.vue?vue&type=template&id=9b71eb30&\", function () {\n api.rerender('9b71eb30', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/SendPaymentModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SetDefaultDiskModal.vue?vue&type=template&id=69f86d68&\"\nimport script from \"./SetDefaultDiskModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SetDefaultDiskModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('69f86d68')) {\n api.createRecord('69f86d68', component.options)\n } else {\n api.reload('69f86d68', component.options)\n }\n module.hot.accept(\"./SetDefaultDiskModal.vue?vue&type=template&id=69f86d68&\", function () {\n api.rerender('69f86d68', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/SetDefaultDiskModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TaxTypeModal.vue?vue&type=template&id=775a9aa1&\"\nimport script from \"./TaxTypeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./TaxTypeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('775a9aa1')) {\n api.createRecord('775a9aa1', component.options)\n } else {\n api.reload('775a9aa1', component.options)\n }\n module.hot.accept(\"./TaxTypeModal.vue?vue&type=template&id=775a9aa1&\", function () {\n api.rerender('775a9aa1', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/TaxTypeModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DoSpacesDisk.vue?vue&type=template&id=0ee64807&\"\nimport script from \"./DoSpacesDisk.vue?vue&type=script&lang=js&\"\nexport * from \"./DoSpacesDisk.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0ee64807')) {\n api.createRecord('0ee64807', component.options)\n } else {\n api.reload('0ee64807', component.options)\n }\n module.hot.accept(\"./DoSpacesDisk.vue?vue&type=template&id=0ee64807&\", function () {\n api.rerender('0ee64807', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/disks/DoSpacesDisk.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DropboxDisk.vue?vue&type=template&id=fbe42512&\"\nimport script from \"./DropboxDisk.vue?vue&type=script&lang=js&\"\nexport * from \"./DropboxDisk.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('fbe42512')) {\n api.createRecord('fbe42512', component.options)\n } else {\n api.reload('fbe42512', component.options)\n }\n module.hot.accept(\"./DropboxDisk.vue?vue&type=template&id=fbe42512&\", function () {\n api.rerender('fbe42512', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/disks/DropboxDisk.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./LocalDisk.vue?vue&type=template&id=72fe6a34&\"\nimport script from \"./LocalDisk.vue?vue&type=script&lang=js&\"\nexport * from \"./LocalDisk.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('72fe6a34')) {\n api.createRecord('72fe6a34', component.options)\n } else {\n api.reload('72fe6a34', component.options)\n }\n module.hot.accept(\"./LocalDisk.vue?vue&type=template&id=72fe6a34&\", function () {\n api.rerender('72fe6a34', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/disks/LocalDisk.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./S3Disk.vue?vue&type=template&id=407c95e2&\"\nimport script from \"./S3Disk.vue?vue&type=script&lang=js&\"\nexport * from \"./S3Disk.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('407c95e2')) {\n api.createRecord('407c95e2', component.options)\n } else {\n api.reload('407c95e2', component.options)\n }\n module.hot.accept(\"./S3Disk.vue?vue&type=template&id=407c95e2&\", function () {\n api.rerender('407c95e2', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/modal/disks/S3Disk.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomerSelectPopup.vue?vue&type=template&id=82eb9c30&\"\nimport script from \"./CustomerSelectPopup.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomerSelectPopup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomerSelectPopup.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('82eb9c30')) {\n api.createRecord('82eb9c30', component.options)\n } else {\n api.reload('82eb9c30', component.options)\n }\n module.hot.accept(\"./CustomerSelectPopup.vue?vue&type=template&id=82eb9c30&\", function () {\n api.rerender('82eb9c30', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/popup/CustomerSelectPopup.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./NoteSelectPopup.vue?vue&type=template&id=37d20654&\"\nimport script from \"./NoteSelectPopup.vue?vue&type=script&lang=js&\"\nexport * from \"./NoteSelectPopup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('37d20654')) {\n api.createRecord('37d20654', component.options)\n } else {\n api.reload('37d20654', component.options)\n }\n module.hot.accept(\"./NoteSelectPopup.vue?vue&type=template&id=37d20654&\", function () {\n api.rerender('37d20654', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/popup/NoteSelectPopup.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TaxSelectPopup.vue?vue&type=template&id=2501fbbf&\"\nimport script from \"./TaxSelectPopup.vue?vue&type=script&lang=js&\"\nexport * from \"./TaxSelectPopup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2501fbbf')) {\n api.createRecord('2501fbbf', component.options)\n } else {\n api.reload('2501fbbf', component.options)\n }\n module.hot.accept(\"./TaxSelectPopup.vue?vue&type=template&id=2501fbbf&\", function () {\n api.rerender('2501fbbf', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/base/popup/TaxSelectPopup.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./LineChart.vue?vue&type=template&id=f00ab88a&scoped=true&\"\nimport script from \"./LineChart.vue?vue&type=script&lang=js&\"\nexport * from \"./LineChart.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LineChart.vue?vue&type=style&index=0&id=f00ab88a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f00ab88a\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('f00ab88a')) {\n api.createRecord('f00ab88a', component.options)\n } else {\n api.reload('f00ab88a', component.options)\n }\n module.hot.accept(\"./LineChart.vue?vue&type=template&id=f00ab88a&scoped=true&\", function () {\n api.rerender('f00ab88a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/chartjs/LineChart.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DateField.vue?vue&type=template&id=7ae4720b&\"\nimport script from \"./DateField.vue?vue&type=script&lang=js&\"\nexport * from \"./DateField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7ae4720b')) {\n api.createRecord('7ae4720b', component.options)\n } else {\n api.reload('7ae4720b', component.options)\n }\n module.hot.accept(\"./DateField.vue?vue&type=template&id=7ae4720b&\", function () {\n api.rerender('7ae4720b', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/DateField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DateTimeField.vue?vue&type=template&id=9af09d84&\"\nimport script from \"./DateTimeField.vue?vue&type=script&lang=js&\"\nexport * from \"./DateTimeField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9af09d84')) {\n api.createRecord('9af09d84', component.options)\n } else {\n api.reload('9af09d84', component.options)\n }\n module.hot.accept(\"./DateTimeField.vue?vue&type=template&id=9af09d84&\", function () {\n api.rerender('9af09d84', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/DateTimeField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DropdownField.vue?vue&type=template&id=1e544188&\"\nimport script from \"./DropdownField.vue?vue&type=script&lang=js&\"\nexport * from \"./DropdownField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1e544188')) {\n api.createRecord('1e544188', component.options)\n } else {\n api.reload('1e544188', component.options)\n }\n module.hot.accept(\"./DropdownField.vue?vue&type=template&id=1e544188&\", function () {\n api.rerender('1e544188', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/DropdownField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./InputField.vue?vue&type=template&id=74b9eb41&\"\nimport script from \"./InputField.vue?vue&type=script&lang=js&\"\nexport * from \"./InputField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('74b9eb41')) {\n api.createRecord('74b9eb41', component.options)\n } else {\n api.reload('74b9eb41', component.options)\n }\n module.hot.accept(\"./InputField.vue?vue&type=template&id=74b9eb41&\", function () {\n api.rerender('74b9eb41', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/InputField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./NumberField.vue?vue&type=template&id=228ac1e0&\"\nimport script from \"./NumberField.vue?vue&type=script&lang=js&\"\nexport * from \"./NumberField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('228ac1e0')) {\n api.createRecord('228ac1e0', component.options)\n } else {\n api.reload('228ac1e0', component.options)\n }\n module.hot.accept(\"./NumberField.vue?vue&type=template&id=228ac1e0&\", function () {\n api.rerender('228ac1e0', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/NumberField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./PhoneField.vue?vue&type=template&id=bf0fc3c6&\"\nimport script from \"./PhoneField.vue?vue&type=script&lang=js&\"\nexport * from \"./PhoneField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('bf0fc3c6')) {\n api.createRecord('bf0fc3c6', component.options)\n } else {\n api.reload('bf0fc3c6', component.options)\n }\n module.hot.accept(\"./PhoneField.vue?vue&type=template&id=bf0fc3c6&\", function () {\n api.rerender('bf0fc3c6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/PhoneField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SwitchField.vue?vue&type=template&id=e0ee08f6&\"\nimport script from \"./SwitchField.vue?vue&type=script&lang=js&\"\nexport * from \"./SwitchField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e0ee08f6')) {\n api.createRecord('e0ee08f6', component.options)\n } else {\n api.reload('e0ee08f6', component.options)\n }\n module.hot.accept(\"./SwitchField.vue?vue&type=template&id=e0ee08f6&\", function () {\n api.rerender('e0ee08f6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/SwitchField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TextAreaField.vue?vue&type=template&id=00137c5f&\"\nimport script from \"./TextAreaField.vue?vue&type=script&lang=js&\"\nexport * from \"./TextAreaField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('00137c5f')) {\n api.createRecord('00137c5f', component.options)\n } else {\n api.reload('00137c5f', component.options)\n }\n module.hot.accept(\"./TextAreaField.vue?vue&type=template&id=00137c5f&\", function () {\n api.rerender('00137c5f', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/TextAreaField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TimeField.vue?vue&type=template&id=e33dbc68&\"\nimport script from \"./TimeField.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e33dbc68')) {\n api.createRecord('e33dbc68', component.options)\n } else {\n api.reload('e33dbc68', component.options)\n }\n module.hot.accept(\"./TimeField.vue?vue&type=template&id=e33dbc68&\", function () {\n api.rerender('e33dbc68', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/TimeField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UrlField.vue?vue&type=template&id=9ad6ed08&\"\nimport script from \"./UrlField.vue?vue&type=script&lang=js&\"\nexport * from \"./UrlField.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9ad6ed08')) {\n api.createRecord('9ad6ed08', component.options)\n } else {\n api.reload('9ad6ed08', component.options)\n }\n module.hot.accept(\"./UrlField.vue?vue&type=template&id=9ad6ed08&\", function () {\n api.rerender('9ad6ed08', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/custom-fields/UrlField.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./AstronautIcon.vue?vue&type=template&id=84eed4ea&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('84eed4ea')) {\n api.createRecord('84eed4ea', component.options)\n } else {\n api.reload('84eed4ea', component.options)\n }\n module.hot.accept(\"./AstronautIcon.vue?vue&type=template&id=84eed4ea&\", function () {\n api.rerender('84eed4ea', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/AstronautIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CapsuleIcon.vue?vue&type=template&id=a14934b2&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('a14934b2')) {\n api.createRecord('a14934b2', component.options)\n } else {\n api.reload('a14934b2', component.options)\n }\n module.hot.accept(\"./CapsuleIcon.vue?vue&type=template&id=a14934b2&\", function () {\n api.rerender('a14934b2', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/CapsuleIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ContactIcon.vue?vue&type=template&id=a890d6cc&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('a890d6cc')) {\n api.createRecord('a890d6cc', component.options)\n } else {\n api.reload('a890d6cc', component.options)\n }\n module.hot.accept(\"./ContactIcon.vue?vue&type=template&id=a890d6cc&\", function () {\n api.rerender('a890d6cc', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/ContactIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DollarIcon.vue?vue&type=template&id=23d17c84&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('23d17c84')) {\n api.createRecord('23d17c84', component.options)\n } else {\n api.reload('23d17c84', component.options)\n }\n module.hot.accept(\"./DollarIcon.vue?vue&type=template&id=23d17c84&\", function () {\n api.rerender('23d17c84', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/DollarIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DotIcon.vue?vue&type=template&id=5d2ded7a&\"\nimport script from \"./DotIcon.vue?vue&type=script&lang=js&\"\nexport * from \"./DotIcon.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DotIcon.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5d2ded7a')) {\n api.createRecord('5d2ded7a', component.options)\n } else {\n api.reload('5d2ded7a', component.options)\n }\n module.hot.accept(\"./DotIcon.vue?vue&type=template&id=5d2ded7a&\", function () {\n api.rerender('5d2ded7a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/DotIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DragIcon.vue?vue&type=template&id=566882bc&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('566882bc')) {\n api.createRecord('566882bc', component.options)\n } else {\n api.reload('566882bc', component.options)\n }\n module.hot.accept(\"./DragIcon.vue?vue&type=template&id=566882bc&\", function () {\n api.rerender('566882bc', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/DragIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./EstimateIcon.vue?vue&type=template&id=68d50330&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('68d50330')) {\n api.createRecord('68d50330', component.options)\n } else {\n api.reload('68d50330', component.options)\n }\n module.hot.accept(\"./EstimateIcon.vue?vue&type=template&id=68d50330&\", function () {\n api.rerender('68d50330', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/EstimateIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./InvoiceIcon.vue?vue&type=template&id=29c156a7&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('29c156a7')) {\n api.createRecord('29c156a7', component.options)\n } else {\n api.reload('29c156a7', component.options)\n }\n module.hot.accept(\"./InvoiceIcon.vue?vue&type=template&id=29c156a7&\", function () {\n api.rerender('29c156a7', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/InvoiceIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./LoadingIcon.vue?vue&type=template&id=48ff1494&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('48ff1494')) {\n api.createRecord('48ff1494', component.options)\n } else {\n api.reload('48ff1494', component.options)\n }\n module.hot.accept(\"./LoadingIcon.vue?vue&type=template&id=48ff1494&\", function () {\n api.rerender('48ff1494', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/LoadingIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./MoonwalkerIcon.vue?vue&type=template&id=0af5a882&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0af5a882')) {\n api.createRecord('0af5a882', component.options)\n } else {\n api.reload('0af5a882', component.options)\n }\n module.hot.accept(\"./MoonwalkerIcon.vue?vue&type=template&id=0af5a882&\", function () {\n api.rerender('0af5a882', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/MoonwalkerIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ObservatoryIcon.vue?vue&type=template&id=9d648dd8&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9d648dd8')) {\n api.createRecord('9d648dd8', component.options)\n } else {\n api.reload('9d648dd8', component.options)\n }\n module.hot.accept(\"./ObservatoryIcon.vue?vue&type=template&id=9d648dd8&\", function () {\n api.rerender('9d648dd8', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/ObservatoryIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SatelliteIcon.vue?vue&type=template&id=3ce2a075&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3ce2a075')) {\n api.createRecord('3ce2a075', component.options)\n } else {\n api.reload('3ce2a075', component.options)\n }\n module.hot.accept(\"./SatelliteIcon.vue?vue&type=template&id=3ce2a075&\", function () {\n api.rerender('3ce2a075', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/SatelliteIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SaveIcon.vue?vue&type=template&id=6fc283f6&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6fc283f6')) {\n api.createRecord('6fc283f6', component.options)\n } else {\n api.reload('6fc283f6', component.options)\n }\n module.hot.accept(\"./SaveIcon.vue?vue&type=template&id=6fc283f6&\", function () {\n api.rerender('6fc283f6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/SaveIcon.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./facebook.vue?vue&type=template&id=4f0efdd6&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('4f0efdd6')) {\n api.createRecord('4f0efdd6', component.options)\n } else {\n api.reload('4f0efdd6', component.options)\n }\n module.hot.accept(\"./facebook.vue?vue&type=template&id=4f0efdd6&\", function () {\n api.rerender('4f0efdd6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/facebook.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./google.vue?vue&type=template&id=a154d670&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('a154d670')) {\n api.createRecord('a154d670', component.options)\n } else {\n api.reload('a154d670', component.options)\n }\n module.hot.accept(\"./google.vue?vue&type=template&id=a154d670&\", function () {\n api.rerender('a154d670', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/google.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./twitter.vue?vue&type=template&id=362c9c18&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('362c9c18')) {\n api.createRecord('362c9c18', component.options)\n } else {\n api.reload('362c9c18', component.options)\n }\n module.hot.accept(\"./twitter.vue?vue&type=template&id=362c9c18&\", function () {\n api.rerender('362c9c18', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/components/icon/twitter.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ForgotPassword.vue?vue&type=template&id=1b0d2d3c&\"\nimport script from \"./ForgotPassword.vue?vue&type=script&lang=js&\"\nexport * from \"./ForgotPassword.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1b0d2d3c')) {\n api.createRecord('1b0d2d3c', component.options)\n } else {\n api.reload('1b0d2d3c', component.options)\n }\n module.hot.accept(\"./ForgotPassword.vue?vue&type=template&id=1b0d2d3c&\", function () {\n api.rerender('1b0d2d3c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/auth/ForgotPassword.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=5197e515&\"\nimport script from \"./Login.vue?vue&type=script&lang=js&\"\nexport * from \"./Login.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5197e515')) {\n api.createRecord('5197e515', component.options)\n } else {\n api.reload('5197e515', component.options)\n }\n module.hot.accept(\"./Login.vue?vue&type=template&id=5197e515&\", function () {\n api.rerender('5197e515', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/auth/Login.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Register.vue?vue&type=template&id=4d06c0b2&\"\nimport script from \"./Register.vue?vue&type=script&lang=js&\"\nexport * from \"./Register.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('4d06c0b2')) {\n api.createRecord('4d06c0b2', component.options)\n } else {\n api.reload('4d06c0b2', component.options)\n }\n module.hot.accept(\"./Register.vue?vue&type=template&id=4d06c0b2&\", function () {\n api.rerender('4d06c0b2', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/auth/Register.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ResetPassword.vue?vue&type=template&id=ed663394&\"\nimport script from \"./ResetPassword.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetPassword.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('ed663394')) {\n api.createRecord('ed663394', component.options)\n } else {\n api.reload('ed663394', component.options)\n }\n module.hot.accept(\"./ResetPassword.vue?vue&type=template&id=ed663394&\", function () {\n api.rerender('ed663394', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/auth/ResetPassword.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Create.vue?vue&type=template&id=39b7a26e&\"\nimport script from \"./Create.vue?vue&type=script&lang=js&\"\nexport * from \"./Create.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('39b7a26e')) {\n api.createRecord('39b7a26e', component.options)\n } else {\n api.reload('39b7a26e', component.options)\n }\n module.hot.accept(\"./Create.vue?vue&type=template&id=39b7a26e&\", function () {\n api.rerender('39b7a26e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/customers/Create.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=0e4dee95&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0e4dee95')) {\n api.createRecord('0e4dee95', component.options)\n } else {\n api.reload('0e4dee95', component.options)\n }\n module.hot.accept(\"./Index.vue?vue&type=template&id=0e4dee95&\", function () {\n api.rerender('0e4dee95', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/customers/Index.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./View.vue?vue&type=template&id=12b4d59c&\"\nimport script from \"./View.vue?vue&type=script&lang=js&\"\nexport * from \"./View.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('12b4d59c')) {\n api.createRecord('12b4d59c', component.options)\n } else {\n api.reload('12b4d59c', component.options)\n }\n module.hot.accept(\"./View.vue?vue&type=template&id=12b4d59c&\", function () {\n api.rerender('12b4d59c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/customers/View.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomerChart.vue?vue&type=template&id=28f93b20&\"\nimport script from \"./CustomerChart.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomerChart.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('28f93b20')) {\n api.createRecord('28f93b20', component.options)\n } else {\n api.reload('28f93b20', component.options)\n }\n module.hot.accept(\"./CustomerChart.vue?vue&type=template&id=28f93b20&\", function () {\n api.rerender('28f93b20', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/customers/partials/CustomerChart.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomerInfo.vue?vue&type=template&id=b8835be8&\"\nimport script from \"./CustomerInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomerInfo.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b8835be8')) {\n api.createRecord('b8835be8', component.options)\n } else {\n api.reload('b8835be8', component.options)\n }\n module.hot.accept(\"./CustomerInfo.vue?vue&type=template&id=b8835be8&\", function () {\n api.rerender('b8835be8', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/customers/partials/CustomerInfo.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomerViewSidebar.vue?vue&type=template&id=1fd270ee&\"\nimport script from \"./CustomerViewSidebar.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomerViewSidebar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1fd270ee')) {\n api.createRecord('1fd270ee', component.options)\n } else {\n api.reload('1fd270ee', component.options)\n }\n module.hot.accept(\"./CustomerViewSidebar.vue?vue&type=template&id=1fd270ee&\", function () {\n api.rerender('1fd270ee', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/customers/partials/CustomerViewSidebar.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Dashboard.vue?vue&type=template&id=e203f454&\"\nimport script from \"./Dashboard.vue?vue&type=script&lang=js&\"\nexport * from \"./Dashboard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e203f454')) {\n api.createRecord('e203f454', component.options)\n } else {\n api.reload('e203f454', component.options)\n }\n module.hot.accept(\"./Dashboard.vue?vue&type=template&id=e203f454&\", function () {\n api.rerender('e203f454', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/dashboard/Dashboard.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DashboardChart.vue?vue&type=template&id=e9bae250&\"\nimport script from \"./DashboardChart.vue?vue&type=script&lang=js&\"\nexport * from \"./DashboardChart.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e9bae250')) {\n api.createRecord('e9bae250', component.options)\n } else {\n api.reload('e9bae250', component.options)\n }\n module.hot.accept(\"./DashboardChart.vue?vue&type=template&id=e9bae250&\", function () {\n api.rerender('e9bae250', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/dashboard/DashboardChart.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DashboardStats.vue?vue&type=template&id=9d5999ce&\"\nimport script from \"./DashboardStats.vue?vue&type=script&lang=js&\"\nexport * from \"./DashboardStats.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9d5999ce')) {\n api.createRecord('9d5999ce', component.options)\n } else {\n api.reload('9d5999ce', component.options)\n }\n module.hot.accept(\"./DashboardStats.vue?vue&type=template&id=9d5999ce&\", function () {\n api.rerender('9d5999ce', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/dashboard/DashboardStats.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./DashboardTable.vue?vue&type=template&id=93490a70&\"\nimport script from \"./DashboardTable.vue?vue&type=script&lang=js&\"\nexport * from \"./DashboardTable.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('93490a70')) {\n api.createRecord('93490a70', component.options)\n } else {\n api.reload('93490a70', component.options)\n }\n module.hot.accept(\"./DashboardTable.vue?vue&type=template&id=93490a70&\", function () {\n api.rerender('93490a70', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/dashboard/DashboardTable.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./404.vue?vue&type=template&id=a12afef2&\"\nimport script from \"./404.vue?vue&type=script&lang=js&\"\nexport * from \"./404.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('a12afef2')) {\n api.createRecord('a12afef2', component.options)\n } else {\n api.reload('a12afef2', component.options)\n }\n module.hot.accept(\"./404.vue?vue&type=template&id=a12afef2&\", function () {\n api.rerender('a12afef2', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/errors/404.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Create.vue?vue&type=template&id=eb7995da&\"\nimport script from \"./Create.vue?vue&type=script&lang=js&\"\nexport * from \"./Create.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Create.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('eb7995da')) {\n api.createRecord('eb7995da', component.options)\n } else {\n api.reload('eb7995da', component.options)\n }\n module.hot.accept(\"./Create.vue?vue&type=template&id=eb7995da&\", function () {\n api.rerender('eb7995da', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/estimates/Create.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomerSelect.vue?vue&type=template&id=046a7891&\"\nimport script from \"./CustomerSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomerSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('046a7891')) {\n api.createRecord('046a7891', component.options)\n } else {\n api.reload('046a7891', component.options)\n }\n module.hot.accept(\"./CustomerSelect.vue?vue&type=template&id=046a7891&\", function () {\n api.rerender('046a7891', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/estimates/CustomerSelect.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./EstimateTax.vue?vue&type=template&id=9584db48&\"\nimport script from \"./EstimateTax.vue?vue&type=script&lang=js&\"\nexport * from \"./EstimateTax.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9584db48')) {\n api.createRecord('9584db48', component.options)\n } else {\n api.reload('9584db48', component.options)\n }\n module.hot.accept(\"./EstimateTax.vue?vue&type=template&id=9584db48&\", function () {\n api.rerender('9584db48', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/estimates/EstimateTax.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=0b6ff70b&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0b6ff70b')) {\n api.createRecord('0b6ff70b', component.options)\n } else {\n api.reload('0b6ff70b', component.options)\n }\n module.hot.accept(\"./Index.vue?vue&type=template&id=0b6ff70b&\", function () {\n api.rerender('0b6ff70b', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/estimates/Index.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Item.vue?vue&type=template&id=5724012c&\"\nimport script from \"./Item.vue?vue&type=script&lang=js&\"\nexport * from \"./Item.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5724012c')) {\n api.createRecord('5724012c', component.options)\n } else {\n api.reload('5724012c', component.options)\n }\n module.hot.accept(\"./Item.vue?vue&type=template&id=5724012c&\", function () {\n api.rerender('5724012c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/estimates/Item.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ItemSelect.vue?vue&type=template&id=6cd065f4&\"\nimport script from \"./ItemSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6cd065f4')) {\n api.createRecord('6cd065f4', component.options)\n } else {\n api.reload('6cd065f4', component.options)\n }\n module.hot.accept(\"./ItemSelect.vue?vue&type=template&id=6cd065f4&\", function () {\n api.rerender('6cd065f4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/estimates/ItemSelect.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Tax.vue?vue&type=template&id=5b27a4b8&\"\nimport script from \"./Tax.vue?vue&type=script&lang=js&\"\nexport * from \"./Tax.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5b27a4b8')) {\n api.createRecord('5b27a4b8', component.options)\n } else {\n api.reload('5b27a4b8', component.options)\n }\n module.hot.accept(\"./Tax.vue?vue&type=template&id=5b27a4b8&\", function () {\n api.rerender('5b27a4b8', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/estimates/Tax.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./View.vue?vue&type=template&id=54f4b408&\"\nimport script from \"./View.vue?vue&type=script&lang=js&\"\nexport * from \"./View.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('54f4b408')) {\n api.createRecord('54f4b408', component.options)\n } else {\n api.reload('54f4b408', component.options)\n }\n module.hot.accept(\"./View.vue?vue&type=template&id=54f4b408&\", function () {\n api.rerender('54f4b408', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/estimates/View.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Create.vue?vue&type=template&id=3c8afaa6&\"\nimport script from \"./Create.vue?vue&type=script&lang=js&\"\nexport * from \"./Create.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3c8afaa6')) {\n api.createRecord('3c8afaa6', component.options)\n } else {\n api.reload('3c8afaa6', component.options)\n }\n module.hot.accept(\"./Create.vue?vue&type=template&id=3c8afaa6&\", function () {\n api.rerender('3c8afaa6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/expenses/Create.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=9928e39e&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9928e39e')) {\n api.createRecord('9928e39e', component.options)\n } else {\n api.reload('9928e39e', component.options)\n }\n module.hot.accept(\"./Index.vue?vue&type=template&id=9928e39e&\", function () {\n api.rerender('9928e39e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/expenses/Index.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Create.vue?vue&type=template&id=3f396602&\"\nimport script from \"./Create.vue?vue&type=script&lang=js&\"\nexport * from \"./Create.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Create.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3f396602')) {\n api.createRecord('3f396602', component.options)\n } else {\n api.reload('3f396602', component.options)\n }\n module.hot.accept(\"./Create.vue?vue&type=template&id=3f396602&\", function () {\n api.rerender('3f396602', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/invoices/Create.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomerSelect.vue?vue&type=template&id=b7d76b00&\"\nimport script from \"./CustomerSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomerSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b7d76b00')) {\n api.createRecord('b7d76b00', component.options)\n } else {\n api.reload('b7d76b00', component.options)\n }\n module.hot.accept(\"./CustomerSelect.vue?vue&type=template&id=b7d76b00&\", function () {\n api.rerender('b7d76b00', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/invoices/CustomerSelect.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=19886c3c&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('19886c3c')) {\n api.createRecord('19886c3c', component.options)\n } else {\n api.reload('19886c3c', component.options)\n }\n module.hot.accept(\"./Index.vue?vue&type=template&id=19886c3c&\", function () {\n api.rerender('19886c3c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/invoices/Index.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./InvoiceTax.vue?vue&type=template&id=52c48644&\"\nimport script from \"./InvoiceTax.vue?vue&type=script&lang=js&\"\nexport * from \"./InvoiceTax.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('52c48644')) {\n api.createRecord('52c48644', component.options)\n } else {\n api.reload('52c48644', component.options)\n }\n module.hot.accept(\"./InvoiceTax.vue?vue&type=template&id=52c48644&\", function () {\n api.rerender('52c48644', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/invoices/InvoiceTax.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Item.vue?vue&type=template&id=71c9a019&\"\nimport script from \"./Item.vue?vue&type=script&lang=js&\"\nexport * from \"./Item.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('71c9a019')) {\n api.createRecord('71c9a019', component.options)\n } else {\n api.reload('71c9a019', component.options)\n }\n module.hot.accept(\"./Item.vue?vue&type=template&id=71c9a019&\", function () {\n api.rerender('71c9a019', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/invoices/Item.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ItemSelect.vue?vue&type=template&id=75c42316&\"\nimport script from \"./ItemSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('75c42316')) {\n api.createRecord('75c42316', component.options)\n } else {\n api.reload('75c42316', component.options)\n }\n module.hot.accept(\"./ItemSelect.vue?vue&type=template&id=75c42316&\", function () {\n api.rerender('75c42316', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/invoices/ItemSelect.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Tax.vue?vue&type=template&id=21d23b15&\"\nimport script from \"./Tax.vue?vue&type=script&lang=js&\"\nexport * from \"./Tax.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('21d23b15')) {\n api.createRecord('21d23b15', component.options)\n } else {\n api.reload('21d23b15', component.options)\n }\n module.hot.accept(\"./Tax.vue?vue&type=template&id=21d23b15&\", function () {\n api.rerender('21d23b15', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/invoices/Tax.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./View.vue?vue&type=template&id=72e146ab&\"\nimport script from \"./View.vue?vue&type=script&lang=js&\"\nexport * from \"./View.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('72e146ab')) {\n api.createRecord('72e146ab', component.options)\n } else {\n api.reload('72e146ab', component.options)\n }\n module.hot.accept(\"./View.vue?vue&type=template&id=72e146ab&\", function () {\n api.rerender('72e146ab', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/invoices/View.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Create.vue?vue&type=template&id=213dc7fe&\"\nimport script from \"./Create.vue?vue&type=script&lang=js&\"\nexport * from \"./Create.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('213dc7fe')) {\n api.createRecord('213dc7fe', component.options)\n } else {\n api.reload('213dc7fe', component.options)\n }\n module.hot.accept(\"./Create.vue?vue&type=template&id=213dc7fe&\", function () {\n api.rerender('213dc7fe', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/items/Create.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=c69c4a80&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('c69c4a80')) {\n api.createRecord('c69c4a80', component.options)\n } else {\n api.reload('c69c4a80', component.options)\n }\n module.hot.accept(\"./Index.vue?vue&type=template&id=c69c4a80&\", function () {\n api.rerender('c69c4a80', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/items/Index.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./LayoutBasic.vue?vue&type=template&id=68eb71ca&\"\nimport script from \"./LayoutBasic.vue?vue&type=script&lang=js&\"\nexport * from \"./LayoutBasic.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('68eb71ca')) {\n api.createRecord('68eb71ca', component.options)\n } else {\n api.reload('68eb71ca', component.options)\n }\n module.hot.accept(\"./LayoutBasic.vue?vue&type=template&id=68eb71ca&\", function () {\n api.rerender('68eb71ca', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/layouts/LayoutBasic.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./LayoutLogin.vue?vue&type=template&id=6b516654&scoped=true&\"\nvar script = {}\nimport style0 from \"./LayoutLogin.vue?vue&type=style&index=0&id=6b516654&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6b516654\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6b516654')) {\n api.createRecord('6b516654', component.options)\n } else {\n api.reload('6b516654', component.options)\n }\n module.hot.accept(\"./LayoutLogin.vue?vue&type=template&id=6b516654&scoped=true&\", function () {\n api.rerender('6b516654', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/layouts/LayoutLogin.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./LayoutWizard.vue?vue&type=template&id=c360a464&\"\nimport script from \"./LayoutWizard.vue?vue&type=script&lang=js&\"\nexport * from \"./LayoutWizard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('c360a464')) {\n api.createRecord('c360a464', component.options)\n } else {\n api.reload('c360a464', component.options)\n }\n module.hot.accept(\"./LayoutWizard.vue?vue&type=template&id=c360a464&\", function () {\n api.rerender('c360a464', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/layouts/LayoutWizard.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TheSiteFooter.vue?vue&type=template&id=681cdd6f&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('681cdd6f')) {\n api.createRecord('681cdd6f', component.options)\n } else {\n api.reload('681cdd6f', component.options)\n }\n module.hot.accept(\"./TheSiteFooter.vue?vue&type=template&id=681cdd6f&\", function () {\n api.rerender('681cdd6f', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/layouts/partials/TheSiteFooter.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TheSiteHeader.vue?vue&type=template&id=ed617d3e&\"\nimport script from \"./TheSiteHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./TheSiteHeader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TheSiteHeader.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('ed617d3e')) {\n api.createRecord('ed617d3e', component.options)\n } else {\n api.reload('ed617d3e', component.options)\n }\n module.hot.accept(\"./TheSiteHeader.vue?vue&type=template&id=ed617d3e&\", function () {\n api.rerender('ed617d3e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/layouts/partials/TheSiteHeader.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TheSiteSidebar.vue?vue&type=template&id=44294cb8&\"\nimport script from \"./TheSiteSidebar.vue?vue&type=script&lang=js&\"\nexport * from \"./TheSiteSidebar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('44294cb8')) {\n api.createRecord('44294cb8', component.options)\n } else {\n api.reload('44294cb8', component.options)\n }\n module.hot.accept(\"./TheSiteSidebar.vue?vue&type=template&id=44294cb8&\", function () {\n api.rerender('44294cb8', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/layouts/partials/TheSiteSidebar.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Create.vue?vue&type=template&id=591ad75b&\"\nimport script from \"./Create.vue?vue&type=script&lang=js&\"\nexport * from \"./Create.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('591ad75b')) {\n api.createRecord('591ad75b', component.options)\n } else {\n api.reload('591ad75b', component.options)\n }\n module.hot.accept(\"./Create.vue?vue&type=template&id=591ad75b&\", function () {\n api.rerender('591ad75b', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/payments/Create.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=7d76ebc3&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7d76ebc3')) {\n api.createRecord('7d76ebc3', component.options)\n } else {\n api.reload('7d76ebc3', component.options)\n }\n module.hot.accept(\"./Index.vue?vue&type=template&id=7d76ebc3&\", function () {\n api.rerender('7d76ebc3', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/payments/Index.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./View.vue?vue&type=template&id=5e1d8b78&\"\nimport script from \"./View.vue?vue&type=script&lang=js&\"\nexport * from \"./View.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5e1d8b78')) {\n api.createRecord('5e1d8b78', component.options)\n } else {\n api.reload('5e1d8b78', component.options)\n }\n module.hot.accept(\"./View.vue?vue&type=template&id=5e1d8b78&\", function () {\n api.rerender('5e1d8b78', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/payments/View.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ExpensesReport.vue?vue&type=template&id=d6fb56dc&\"\nimport script from \"./ExpensesReport.vue?vue&type=script&lang=js&\"\nexport * from \"./ExpensesReport.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('d6fb56dc')) {\n api.createRecord('d6fb56dc', component.options)\n } else {\n api.reload('d6fb56dc', component.options)\n }\n module.hot.accept(\"./ExpensesReport.vue?vue&type=template&id=d6fb56dc&\", function () {\n api.rerender('d6fb56dc', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/reports/ExpensesReport.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ProfitLossReport.vue?vue&type=template&id=b171e984&\"\nimport script from \"./ProfitLossReport.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfitLossReport.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b171e984')) {\n api.createRecord('b171e984', component.options)\n } else {\n api.reload('b171e984', component.options)\n }\n module.hot.accept(\"./ProfitLossReport.vue?vue&type=template&id=b171e984&\", function () {\n api.rerender('b171e984', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/reports/ProfitLossReport.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SalesReports.vue?vue&type=template&id=441c3036&\"\nimport script from \"./SalesReports.vue?vue&type=script&lang=js&\"\nexport * from \"./SalesReports.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('441c3036')) {\n api.createRecord('441c3036', component.options)\n } else {\n api.reload('441c3036', component.options)\n }\n module.hot.accept(\"./SalesReports.vue?vue&type=template&id=441c3036&\", function () {\n api.rerender('441c3036', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/reports/SalesReports.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TaxReport.vue?vue&type=template&id=7eeb5fac&\"\nimport script from \"./TaxReport.vue?vue&type=script&lang=js&\"\nexport * from \"./TaxReport.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7eeb5fac')) {\n api.createRecord('7eeb5fac', component.options)\n } else {\n api.reload('7eeb5fac', component.options)\n }\n module.hot.accept(\"./TaxReport.vue?vue&type=template&id=7eeb5fac&\", function () {\n api.rerender('7eeb5fac', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/reports/TaxReport.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=66c9f590&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=66c9f590&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"66c9f590\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('66c9f590')) {\n api.createRecord('66c9f590', component.options)\n } else {\n api.reload('66c9f590', component.options)\n }\n module.hot.accept(\"./Index.vue?vue&type=template&id=66c9f590&scoped=true&\", function () {\n api.rerender('66c9f590', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/reports/layout/Index.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BackupSetting.vue?vue&type=template&id=009e7995&\"\nimport script from \"./BackupSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./BackupSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('009e7995')) {\n api.createRecord('009e7995', component.options)\n } else {\n api.reload('009e7995', component.options)\n }\n module.hot.accept(\"./BackupSetting.vue?vue&type=template&id=009e7995&\", function () {\n api.rerender('009e7995', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/BackupSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CompanyInfoSetting.vue?vue&type=template&id=a4bebaa4&\"\nimport script from \"./CompanyInfoSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./CompanyInfoSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('a4bebaa4')) {\n api.createRecord('a4bebaa4', component.options)\n } else {\n api.reload('a4bebaa4', component.options)\n }\n module.hot.accept(\"./CompanyInfoSetting.vue?vue&type=template&id=a4bebaa4&\", function () {\n api.rerender('a4bebaa4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/CompanyInfoSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomFieldsSetting.vue?vue&type=template&id=40a68d8d&\"\nimport script from \"./CustomFieldsSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomFieldsSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('40a68d8d')) {\n api.createRecord('40a68d8d', component.options)\n } else {\n api.reload('40a68d8d', component.options)\n }\n module.hot.accept(\"./CustomFieldsSetting.vue?vue&type=template&id=40a68d8d&\", function () {\n api.rerender('40a68d8d', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/CustomFieldsSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomizationSetting.vue?vue&type=template&id=e8841734&\"\nimport script from \"./CustomizationSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomizationSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e8841734')) {\n api.createRecord('e8841734', component.options)\n } else {\n api.reload('e8841734', component.options)\n }\n module.hot.accept(\"./CustomizationSetting.vue?vue&type=template&id=e8841734&\", function () {\n api.rerender('e8841734', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/CustomizationSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ExpenseCategorySetting.vue?vue&type=template&id=0d61b2ba&\"\nimport script from \"./ExpenseCategorySetting.vue?vue&type=script&lang=js&\"\nexport * from \"./ExpenseCategorySetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0d61b2ba')) {\n api.createRecord('0d61b2ba', component.options)\n } else {\n api.reload('0d61b2ba', component.options)\n }\n module.hot.accept(\"./ExpenseCategorySetting.vue?vue&type=template&id=0d61b2ba&\", function () {\n api.rerender('0d61b2ba', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/ExpenseCategorySetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./FileDiskSetting.vue?vue&type=template&id=08b44404&\"\nimport script from \"./FileDiskSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./FileDiskSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('08b44404')) {\n api.createRecord('08b44404', component.options)\n } else {\n api.reload('08b44404', component.options)\n }\n module.hot.accept(\"./FileDiskSetting.vue?vue&type=template&id=08b44404&\", function () {\n api.rerender('08b44404', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/FileDiskSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./MailConfigSetting.vue?vue&type=template&id=3b0bfb9e&\"\nimport script from \"./MailConfigSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./MailConfigSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3b0bfb9e')) {\n api.createRecord('3b0bfb9e', component.options)\n } else {\n api.reload('3b0bfb9e', component.options)\n }\n module.hot.accept(\"./MailConfigSetting.vue?vue&type=template&id=3b0bfb9e&\", function () {\n api.rerender('3b0bfb9e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/MailConfigSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./NotesSetting.vue?vue&type=template&id=4cc5a490&\"\nimport script from \"./NotesSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./NotesSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('4cc5a490')) {\n api.createRecord('4cc5a490', component.options)\n } else {\n api.reload('4cc5a490', component.options)\n }\n module.hot.accept(\"./NotesSetting.vue?vue&type=template&id=4cc5a490&\", function () {\n api.rerender('4cc5a490', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/NotesSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./NotificationsSetting.vue?vue&type=template&id=2bca7831&\"\nimport script from \"./NotificationsSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./NotificationsSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2bca7831')) {\n api.createRecord('2bca7831', component.options)\n } else {\n api.reload('2bca7831', component.options)\n }\n module.hot.accept(\"./NotificationsSetting.vue?vue&type=template&id=2bca7831&\", function () {\n api.rerender('2bca7831', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/NotificationsSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./PaymentsModeSetting.vue?vue&type=template&id=5054a0e7&\"\nimport script from \"./PaymentsModeSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./PaymentsModeSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5054a0e7')) {\n api.createRecord('5054a0e7', component.options)\n } else {\n api.reload('5054a0e7', component.options)\n }\n module.hot.accept(\"./PaymentsModeSetting.vue?vue&type=template&id=5054a0e7&\", function () {\n api.rerender('5054a0e7', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/PaymentsModeSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./PreferencesSetting.vue?vue&type=template&id=df09373e&\"\nimport script from \"./PreferencesSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./PreferencesSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('df09373e')) {\n api.createRecord('df09373e', component.options)\n } else {\n api.reload('df09373e', component.options)\n }\n module.hot.accept(\"./PreferencesSetting.vue?vue&type=template&id=df09373e&\", function () {\n api.rerender('df09373e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/PreferencesSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SettingsIndex.vue?vue&type=template&id=1d357956&\"\nimport script from \"./SettingsIndex.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsIndex.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1d357956')) {\n api.createRecord('1d357956', component.options)\n } else {\n api.reload('1d357956', component.options)\n }\n module.hot.accept(\"./SettingsIndex.vue?vue&type=template&id=1d357956&\", function () {\n api.rerender('1d357956', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/SettingsIndex.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./TaxTypesSetting.vue?vue&type=template&id=44e1b6ee&\"\nimport script from \"./TaxTypesSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./TaxTypesSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('44e1b6ee')) {\n api.createRecord('44e1b6ee', component.options)\n } else {\n api.reload('44e1b6ee', component.options)\n }\n module.hot.accept(\"./TaxTypesSetting.vue?vue&type=template&id=44e1b6ee&\", function () {\n api.rerender('44e1b6ee', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/TaxTypesSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UpdateAppSetting.vue?vue&type=template&id=470d0701&\"\nimport script from \"./UpdateAppSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./UpdateAppSetting.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UpdateAppSetting.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('470d0701')) {\n api.createRecord('470d0701', component.options)\n } else {\n api.reload('470d0701', component.options)\n }\n module.hot.accept(\"./UpdateAppSetting.vue?vue&type=template&id=470d0701&\", function () {\n api.rerender('470d0701', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/UpdateAppSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserProfileSetting.vue?vue&type=template&id=279e3c3b&\"\nimport script from \"./UserProfileSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./UserProfileSetting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('279e3c3b')) {\n api.createRecord('279e3c3b', component.options)\n } else {\n api.reload('279e3c3b', component.options)\n }\n module.hot.accept(\"./UserProfileSetting.vue?vue&type=template&id=279e3c3b&\", function () {\n api.rerender('279e3c3b', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/UserProfileSetting.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./EstimatesTab.vue?vue&type=template&id=948bc1b0&\"\nimport script from \"./EstimatesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EstimatesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('948bc1b0')) {\n api.createRecord('948bc1b0', component.options)\n } else {\n api.reload('948bc1b0', component.options)\n }\n module.hot.accept(\"./EstimatesTab.vue?vue&type=template&id=948bc1b0&\", function () {\n api.rerender('948bc1b0', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/customization-tabs/EstimatesTab.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./InvoicesTab.vue?vue&type=template&id=985cfa3e&\"\nimport script from \"./InvoicesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./InvoicesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('985cfa3e')) {\n api.createRecord('985cfa3e', component.options)\n } else {\n api.reload('985cfa3e', component.options)\n }\n module.hot.accept(\"./InvoicesTab.vue?vue&type=template&id=985cfa3e&\", function () {\n api.rerender('985cfa3e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/customization-tabs/InvoicesTab.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./ItemsTab.vue?vue&type=template&id=1c406d13&\"\nimport script from \"./ItemsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1c406d13')) {\n api.createRecord('1c406d13', component.options)\n } else {\n api.reload('1c406d13', component.options)\n }\n module.hot.accept(\"./ItemsTab.vue?vue&type=template&id=1c406d13&\", function () {\n api.rerender('1c406d13', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/customization-tabs/ItemsTab.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./PaymentsTab.vue?vue&type=template&id=484b88ba&\"\nimport script from \"./PaymentsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./PaymentsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('484b88ba')) {\n api.createRecord('484b88ba', component.options)\n } else {\n api.reload('484b88ba', component.options)\n }\n module.hot.accept(\"./PaymentsTab.vue?vue&type=template&id=484b88ba&\", function () {\n api.rerender('484b88ba', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/customization-tabs/PaymentsTab.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BasicMailDriver.vue?vue&type=template&id=0ad022ba&\"\nimport script from \"./BasicMailDriver.vue?vue&type=script&lang=js&\"\nexport * from \"./BasicMailDriver.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0ad022ba')) {\n api.createRecord('0ad022ba', component.options)\n } else {\n api.reload('0ad022ba', component.options)\n }\n module.hot.accept(\"./BasicMailDriver.vue?vue&type=template&id=0ad022ba&\", function () {\n api.rerender('0ad022ba', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/mail-driver/BasicMailDriver.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./MailgunMailDriver.vue?vue&type=template&id=71ebdbde&\"\nimport script from \"./MailgunMailDriver.vue?vue&type=script&lang=js&\"\nexport * from \"./MailgunMailDriver.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('71ebdbde')) {\n api.createRecord('71ebdbde', component.options)\n } else {\n api.reload('71ebdbde', component.options)\n }\n module.hot.accept(\"./MailgunMailDriver.vue?vue&type=template&id=71ebdbde&\", function () {\n api.rerender('71ebdbde', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/mail-driver/MailgunMailDriver.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SesMailDriver.vue?vue&type=template&id=31aca916&\"\nimport script from \"./SesMailDriver.vue?vue&type=script&lang=js&\"\nexport * from \"./SesMailDriver.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('31aca916')) {\n api.createRecord('31aca916', component.options)\n } else {\n api.reload('31aca916', component.options)\n }\n module.hot.accept(\"./SesMailDriver.vue?vue&type=template&id=31aca916&\", function () {\n api.rerender('31aca916', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/mail-driver/SesMailDriver.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SmtpMailDriver.vue?vue&type=template&id=42829d0f&\"\nimport script from \"./SmtpMailDriver.vue?vue&type=script&lang=js&\"\nexport * from \"./SmtpMailDriver.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('42829d0f')) {\n api.createRecord('42829d0f', component.options)\n } else {\n api.reload('42829d0f', component.options)\n }\n module.hot.accept(\"./SmtpMailDriver.vue?vue&type=template&id=42829d0f&\", function () {\n api.rerender('42829d0f', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/settings/mail-driver/SmtpMailDriver.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Create.vue?vue&type=template&id=02c7e4b6&\"\nimport script from \"./Create.vue?vue&type=script&lang=js&\"\nexport * from \"./Create.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('02c7e4b6')) {\n api.createRecord('02c7e4b6', component.options)\n } else {\n api.reload('02c7e4b6', component.options)\n }\n module.hot.accept(\"./Create.vue?vue&type=template&id=02c7e4b6&\", function () {\n api.rerender('02c7e4b6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/users/Create.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=17954708&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('17954708')) {\n api.createRecord('17954708', component.options)\n } else {\n api.reload('17954708', component.options)\n }\n module.hot.accept(\"./Index.vue?vue&type=template&id=17954708&\", function () {\n api.rerender('17954708', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/users/Index.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Wizard.vue?vue&type=template&id=6cc2608c&\"\nimport script from \"./Wizard.vue?vue&type=script&lang=js&\"\nexport * from \"./Wizard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6cc2608c')) {\n api.createRecord('6cc2608c', component.options)\n } else {\n api.reload('6cc2608c', component.options)\n }\n module.hot.accept(\"./Wizard.vue?vue&type=template&id=6cc2608c&\", function () {\n api.rerender('6cc2608c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/Wizard.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./WizardCompanyInfoStep.vue?vue&type=template&id=2bdb428a&\"\nimport script from \"./WizardCompanyInfoStep.vue?vue&type=script&lang=js&\"\nexport * from \"./WizardCompanyInfoStep.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2bdb428a')) {\n api.createRecord('2bdb428a', component.options)\n } else {\n api.reload('2bdb428a', component.options)\n }\n module.hot.accept(\"./WizardCompanyInfoStep.vue?vue&type=template&id=2bdb428a&\", function () {\n api.rerender('2bdb428a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/WizardCompanyInfoStep.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./WizardDatabaseStep.vue?vue&type=template&id=450ee213&\"\nimport script from \"./WizardDatabaseStep.vue?vue&type=script&lang=js&\"\nexport * from \"./WizardDatabaseStep.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('450ee213')) {\n api.createRecord('450ee213', component.options)\n } else {\n api.reload('450ee213', component.options)\n }\n module.hot.accept(\"./WizardDatabaseStep.vue?vue&type=template&id=450ee213&\", function () {\n api.rerender('450ee213', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/WizardDatabaseStep.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./WizardEmailConfigStep.vue?vue&type=template&id=549e82ee&\"\nimport script from \"./WizardEmailConfigStep.vue?vue&type=script&lang=js&\"\nexport * from \"./WizardEmailConfigStep.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('549e82ee')) {\n api.createRecord('549e82ee', component.options)\n } else {\n api.reload('549e82ee', component.options)\n }\n module.hot.accept(\"./WizardEmailConfigStep.vue?vue&type=template&id=549e82ee&\", function () {\n api.rerender('549e82ee', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/WizardEmailConfigStep.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./WizardPermissionStep.vue?vue&type=template&id=de196532&\"\nimport script from \"./WizardPermissionStep.vue?vue&type=script&lang=js&\"\nexport * from \"./WizardPermissionStep.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('de196532')) {\n api.createRecord('de196532', component.options)\n } else {\n api.reload('de196532', component.options)\n }\n module.hot.accept(\"./WizardPermissionStep.vue?vue&type=template&id=de196532&\", function () {\n api.rerender('de196532', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/WizardPermissionStep.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./WizardSettingsStep.vue?vue&type=template&id=058764bb&\"\nimport script from \"./WizardSettingsStep.vue?vue&type=script&lang=js&\"\nexport * from \"./WizardSettingsStep.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('058764bb')) {\n api.createRecord('058764bb', component.options)\n } else {\n api.reload('058764bb', component.options)\n }\n module.hot.accept(\"./WizardSettingsStep.vue?vue&type=template&id=058764bb&\", function () {\n api.rerender('058764bb', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/WizardSettingsStep.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./WizardSystemRequirementStep.vue?vue&type=template&id=5ae7e484&\"\nimport script from \"./WizardSystemRequirementStep.vue?vue&type=script&lang=js&\"\nexport * from \"./WizardSystemRequirementStep.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5ae7e484')) {\n api.createRecord('5ae7e484', component.options)\n } else {\n api.reload('5ae7e484', component.options)\n }\n module.hot.accept(\"./WizardSystemRequirementStep.vue?vue&type=template&id=5ae7e484&\", function () {\n api.rerender('5ae7e484', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/WizardSystemRequirementStep.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./WizardUserProfileStep.vue?vue&type=template&id=56b60f64&\"\nimport script from \"./WizardUserProfileStep.vue?vue&type=script&lang=js&\"\nexport * from \"./WizardUserProfileStep.vue?vue&type=script&lang=js&\"\nimport style0 from \"./WizardUserProfileStep.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('56b60f64')) {\n api.createRecord('56b60f64', component.options)\n } else {\n api.reload('56b60f64', component.options)\n }\n module.hot.accept(\"./WizardUserProfileStep.vue?vue&type=template&id=56b60f64&\", function () {\n api.rerender('56b60f64', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/WizardUserProfileStep.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./MysqlDatabase.vue?vue&type=template&id=a868d6ec&\"\nimport script from \"./MysqlDatabase.vue?vue&type=script&lang=js&\"\nexport * from \"./MysqlDatabase.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('a868d6ec')) {\n api.createRecord('a868d6ec', component.options)\n } else {\n api.reload('a868d6ec', component.options)\n }\n module.hot.accept(\"./MysqlDatabase.vue?vue&type=template&id=a868d6ec&\", function () {\n api.rerender('a868d6ec', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/database/MysqlDatabase.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./PgsqlDatabase.vue?vue&type=template&id=7cf0d642&\"\nimport script from \"./PgsqlDatabase.vue?vue&type=script&lang=js&\"\nexport * from \"./PgsqlDatabase.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7cf0d642')) {\n api.createRecord('7cf0d642', component.options)\n } else {\n api.reload('7cf0d642', component.options)\n }\n module.hot.accept(\"./PgsqlDatabase.vue?vue&type=template&id=7cf0d642&\", function () {\n api.rerender('7cf0d642', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/database/PgsqlDatabase.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SqliteDatabase.vue?vue&type=template&id=234e432a&\"\nimport script from \"./SqliteDatabase.vue?vue&type=script&lang=js&\"\nexport * from \"./SqliteDatabase.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('234e432a')) {\n api.createRecord('234e432a', component.options)\n } else {\n api.reload('234e432a', component.options)\n }\n module.hot.accept(\"./SqliteDatabase.vue?vue&type=template&id=234e432a&\", function () {\n api.rerender('234e432a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/database/SqliteDatabase.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SqlsrvDatabase.vue?vue&type=template&id=8e4f75f2&\"\nimport script from \"./SqlsrvDatabase.vue?vue&type=script&lang=js&\"\nexport * from \"./SqlsrvDatabase.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('8e4f75f2')) {\n api.createRecord('8e4f75f2', component.options)\n } else {\n api.reload('8e4f75f2', component.options)\n }\n module.hot.accept(\"./SqlsrvDatabase.vue?vue&type=template&id=8e4f75f2&\", function () {\n api.rerender('8e4f75f2', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/database/SqlsrvDatabase.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./BasicMailDriver.vue?vue&type=template&id=703cfaaa&\"\nimport script from \"./BasicMailDriver.vue?vue&type=script&lang=js&\"\nexport * from \"./BasicMailDriver.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('703cfaaa')) {\n api.createRecord('703cfaaa', component.options)\n } else {\n api.reload('703cfaaa', component.options)\n }\n module.hot.accept(\"./BasicMailDriver.vue?vue&type=template&id=703cfaaa&\", function () {\n api.rerender('703cfaaa', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/mail-driver/BasicMailDriver.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./MailgunMailDriver.vue?vue&type=template&id=13208de6&\"\nimport script from \"./MailgunMailDriver.vue?vue&type=script&lang=js&\"\nexport * from \"./MailgunMailDriver.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('13208de6')) {\n api.createRecord('13208de6', component.options)\n } else {\n api.reload('13208de6', component.options)\n }\n module.hot.accept(\"./MailgunMailDriver.vue?vue&type=template&id=13208de6&\", function () {\n api.rerender('13208de6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/mail-driver/MailgunMailDriver.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SesMailDriver.vue?vue&type=template&id=e248c1c4&\"\nimport script from \"./SesMailDriver.vue?vue&type=script&lang=js&\"\nexport * from \"./SesMailDriver.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e248c1c4')) {\n api.createRecord('e248c1c4', component.options)\n } else {\n api.reload('e248c1c4', component.options)\n }\n module.hot.accept(\"./SesMailDriver.vue?vue&type=template&id=e248c1c4&\", function () {\n api.rerender('e248c1c4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/mail-driver/SesMailDriver.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SmtpMailDriver.vue?vue&type=template&id=e99b2ff2&\"\nimport script from \"./SmtpMailDriver.vue?vue&type=script&lang=js&\"\nexport * from \"./SmtpMailDriver.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/Users/sebastiancretu/Documents/company/work/crater/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e99b2ff2')) {\n api.createRecord('e99b2ff2', component.options)\n } else {\n api.reload('e99b2ff2', component.options)\n }\n module.hot.accept(\"./SmtpMailDriver.vue?vue&type=template&id=e99b2ff2&\", function () {\n api.rerender('e99b2ff2', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/assets/js/views/wizard/mail-driver/SmtpMailDriver.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GlobalSearch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GlobalSearch.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseCustomInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseCustomInput.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseCustomerSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseCustomerSelect.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseDatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseDatePicker.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseLoader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseLoader.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseTimePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseTimePicker.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BackupModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BackupModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CategoryModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CategoryModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateTimeType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateTimeType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropdownType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropdownType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NumberType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NumberType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OptionsCreate.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OptionsCreate.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhoneType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhoneType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SwitchType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SwitchType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextAreaType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextAreaType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TimeType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TimeType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UrlType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UrlType.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EstimateTemplate.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EstimateTemplate.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileDiskModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileDiskModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InvoiceTemplate.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InvoiceTemplate.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemUnitModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemUnitModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MailTestModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MailTestModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NoteModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NoteModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaymentModeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaymentModeModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendEstimateModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendEstimateModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendInvoiceModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendInvoiceModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendPaymentModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendPaymentModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetDefaultDiskModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetDefaultDiskModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaxTypeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaxTypeModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DoSpacesDisk.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DoSpacesDisk.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropboxDisk.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropboxDisk.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocalDisk.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocalDisk.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./S3Disk.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./S3Disk.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerSelectPopup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerSelectPopup.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NoteSelectPopup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NoteSelectPopup.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaxSelectPopup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaxSelectPopup.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LineChart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LineChart.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateTimeField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateTimeField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropdownField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropdownField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NumberField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NumberField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhoneField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhoneField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SwitchField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SwitchField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextAreaField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextAreaField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TimeField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TimeField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UrlField.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UrlField.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DotIcon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DotIcon.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ForgotPassword.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ForgotPassword.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Register.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Register.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./View.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./View.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerChart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerChart.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerInfo.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerViewSidebar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerViewSidebar.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DashboardChart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DashboardChart.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DashboardStats.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DashboardStats.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DashboardTable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DashboardTable.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./404.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./404.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerSelect.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EstimateTax.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EstimateTax.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemSelect.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tax.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tax.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./View.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./View.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerSelect.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InvoiceTax.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InvoiceTax.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemSelect.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tax.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tax.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./View.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./View.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayoutBasic.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayoutBasic.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayoutWizard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayoutWizard.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheSiteHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheSiteHeader.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheSiteSidebar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheSiteSidebar.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./View.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./View.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExpensesReport.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExpensesReport.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfitLossReport.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfitLossReport.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SalesReports.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SalesReports.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaxReport.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaxReport.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BackupSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BackupSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CompanyInfoSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CompanyInfoSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomFieldsSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomFieldsSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomizationSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomizationSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExpenseCategorySetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExpenseCategorySetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileDiskSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileDiskSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MailConfigSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MailConfigSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotesSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotesSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaymentsModeSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaymentsModeSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PreferencesSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PreferencesSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsIndex.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsIndex.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaxTypesSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaxTypesSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateAppSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateAppSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserProfileSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserProfileSetting.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EstimatesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EstimatesTab.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InvoicesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InvoicesTab.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsTab.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaymentsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaymentsTab.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BasicMailDriver.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BasicMailDriver.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MailgunMailDriver.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MailgunMailDriver.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SesMailDriver.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SesMailDriver.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmtpMailDriver.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmtpMailDriver.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Create.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Wizard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Wizard.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardCompanyInfoStep.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardCompanyInfoStep.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardDatabaseStep.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardDatabaseStep.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardEmailConfigStep.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardEmailConfigStep.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardPermissionStep.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardPermissionStep.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardSettingsStep.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardSettingsStep.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardSystemRequirementStep.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardSystemRequirementStep.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardUserProfileStep.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WizardUserProfileStep.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MysqlDatabase.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MysqlDatabase.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PgsqlDatabase.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PgsqlDatabase.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SqliteDatabase.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SqliteDatabase.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SqlsrvDatabase.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SqlsrvDatabase.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BasicMailDriver.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BasicMailDriver.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MailgunMailDriver.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MailgunMailDriver.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SesMailDriver.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SesMailDriver.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmtpMailDriver.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmtpMailDriver.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../vue-loader/lib/index.js??vue-loader-options!./SwDatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../vue-loader/lib/index.js??vue-loader-options!./SwDatePicker.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../vue-loader/lib/index.js??vue-loader-options!./SwSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../vue-loader/lib/index.js??vue-loader-options!./SwSelect.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../vue-loader/lib/index.js??vue-loader-options!./SweetModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../vue-loader/lib/index.js??vue-loader-options!./SweetModal.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../vue-loader/lib/index.js??vue-loader-options!./SweetModalTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../vue-loader/lib/index.js??vue-loader-options!./SweetModalTab.vue?vue&type=script&lang=js&\"","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.datepickerStyle.container },\n [\n _vm.calendarButton && !_vm.hasIconSlot\n ? _c(\n \"svg\",\n {\n class: _vm.datepickerStyle.icon,\n attrs: { viewBox: \"0 0 20 20\", fill: \"currentColor\" },\n on: {\n click: function($event) {\n return _vm.$refs.BaseDatepicker.fp.open()\n }\n }\n },\n [\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n d:\n \"M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1zm0 5a1 1 0 000 2h8a1 1 0 100-2H6z\",\n \"clip-rule\": \"evenodd\"\n }\n })\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.calendarButton && _vm.hasIconSlot ? _vm._t(\"icon\") : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"flatpickr\",\n _vm._g(\n _vm._b(\n {\n ref: \"BaseDatepicker\",\n class: _vm.datepickerStyle.datepicker,\n attrs: { disabled: _vm.disabled }\n },\n \"flatpickr\",\n _vm.$attrs,\n false\n ),\n _vm.$listeners\n )\n )\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: _vm.multiSelectStyle,\n attrs: {\n tabindex: _vm.searchable ? -1 : _vm.tabindex,\n \"aria-owns\": \"listbox-\" + _vm.id,\n role: \"combobox\"\n },\n on: {\n focus: function($event) {\n return _vm.activate()\n },\n blur: function($event) {\n _vm.searchable ? false : _vm.deactivate()\n },\n keydown: [\n function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n if ($event.target !== $event.currentTarget) {\n return null\n }\n $event.preventDefault()\n return _vm.pointerForward()\n },\n function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n ) {\n return null\n }\n if ($event.target !== $event.currentTarget) {\n return null\n }\n $event.preventDefault()\n return _vm.pointerBackward()\n }\n ],\n keypress: function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\") &&\n _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n ) {\n return null\n }\n $event.stopPropagation()\n if ($event.target !== $event.currentTarget) {\n return null\n }\n return _vm.addPointerElement($event)\n },\n keyup: function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])\n ) {\n return null\n }\n return _vm.deactivate()\n }\n }\n },\n [\n _vm._t(\n \"caret\",\n [\n _c(\n \"div\",\n {\n class: _vm.multiselectSelectStyle,\n on: {\n mousedown: function($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.toggle()\n }\n }\n },\n [\n _c(\"span\", {\n staticClass: \"relative right-0 top-1/2\",\n staticStyle: {\n color: \"'#a5acc1'\",\n \"margin-top\": \"4px\",\n \"border-color\": \"#a5acc1 transparent transparent\",\n \"border-style\": \"solid\",\n \"border-width\": \"5px 5px 0\",\n content: \"''\"\n }\n })\n ]\n )\n ],\n { toggle: _vm.toggle }\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { ref: \"tags\", class: _vm.multiSelectTagsStyle },\n [\n _vm._t(\n \"selection\",\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visibleValues.length > 0,\n expression: \"visibleValues.length > 0\"\n }\n ],\n class: _vm.multiselectTagsWrapStyle\n },\n [\n _vm._l(_vm.visibleValues, function(option, index) {\n return [\n _vm._t(\n \"tag\",\n [\n _c(\n \"span\",\n { key: index, class: _vm.multiselectTagStyle },\n [\n _c(\"span\", {\n domProps: {\n textContent: _vm._s(\n _vm.getOptionLabel(option)\n )\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.multiselectTagIconStyle,\n attrs: { tabindex: \"1\" },\n on: {\n keypress: function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.removeElement(option)\n },\n mousedown: function($event) {\n $event.preventDefault()\n return _vm.removeElement(option)\n }\n }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"multiselect__tag-icon-after\"\n },\n [_vm._v(\"×\")]\n )\n ]\n )\n ]\n )\n ],\n {\n option: option,\n search: _vm.search,\n remove: _vm.removeElement\n }\n )\n ]\n })\n ],\n 2\n ),\n _vm._v(\" \"),\n _vm.internalValue && _vm.internalValue.length > _vm.limit\n ? [\n _vm._t(\"limit\", [\n _c(\"strong\", {\n class: _vm.multiselectStrongStyle,\n domProps: {\n textContent: _vm._s(\n _vm.limitText(_vm.internalValue.length - _vm.limit)\n )\n }\n })\n ])\n ]\n : _vm._e()\n ],\n {\n search: _vm.search,\n remove: _vm.removeElement,\n values: _vm.visibleValues,\n isOpen: _vm.isOpen\n }\n ),\n _vm._v(\" \"),\n _c(\n \"transition\",\n { attrs: { name: \"multiselect__loading\" } },\n [\n _vm._t(\"loading\", [\n _c(\"div\", [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.loading,\n expression: \"loading\"\n }\n ],\n class: _vm.multiselectSpinnerStyle\n },\n [\n _c(\"span\", {\n staticClass: \"multiselect__spinner-before\"\n }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"multiselect__spinner-after\" })\n ]\n )\n ])\n ])\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\"input\", {\n ref: \"search\",\n class: _vm.multiselectInputStyle,\n style: _vm.inputStyle,\n attrs: {\n id: _vm.id,\n name: _vm.name,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled,\n tabindex: _vm.tabindex,\n \"aria-controls\": \"listbox-\" + _vm.id,\n type: \"text\",\n autocomplete: _vm.autoComplete,\n spellcheck: \"false\"\n },\n domProps: { value: _vm.search },\n on: {\n input: function($event) {\n return _vm.updateSearch($event.target.value)\n },\n focus: function($event) {\n $event.preventDefault()\n return _vm.activate()\n },\n blur: function($event) {\n $event.preventDefault()\n return _vm.deactivate()\n },\n keyup: function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n \"Esc\",\n \"Escape\"\n ])\n ) {\n return null\n }\n return _vm.deactivate()\n },\n keydown: [\n function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.pointerForward()\n },\n function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\n \"Up\",\n \"ArrowUp\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.pointerBackward()\n },\n function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"delete\", [8, 46], $event.key, [\n \"Backspace\",\n \"Delete\",\n \"Del\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n return _vm.removeLastElement()\n }\n ],\n keypress: function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n $event.preventDefault()\n $event.stopPropagation()\n if ($event.target !== $event.currentTarget) {\n return null\n }\n return _vm.addPointerElement($event)\n }\n }\n }),\n _vm._v(\" \"),\n _vm.isSingleLabelVisible\n ? _c(\n \"span\",\n {\n class: _vm.multiselectSingleStyle,\n on: {\n mousedown: function($event) {\n $event.preventDefault()\n return _vm.toggle($event)\n }\n }\n },\n [\n _vm._t(\n \"singleLabel\",\n [[_vm._v(_vm._s(_vm.currentOptionLabel))]],\n { option: _vm.singleValue }\n )\n ],\n 2\n )\n : _vm._e()\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\"transition\", { attrs: { name: \"multiselect\" } }, [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isOpen,\n expression: \"isOpen\"\n }\n ],\n ref: \"list\",\n class: _vm.multiselectContentWrapperStyle,\n style: { maxHeight: _vm.optimizedHeight + \"px\" },\n attrs: { tabindex: \"-1\" },\n on: {\n focus: _vm.activate,\n mousedown: function($event) {\n $event.preventDefault()\n }\n }\n },\n [\n _c(\n \"ul\",\n {\n class: _vm.multiselectContentStyle,\n style: _vm.contentStyle,\n attrs: { id: \"listbox-\" + _vm.id, role: \"listbox\" }\n },\n [\n _vm._t(\"beforeList\"),\n _vm._v(\" \"),\n _vm.multiple && _vm.max === _vm.internalValue.length\n ? _c(\"li\", [\n _c(\n \"span\",\n { class: _vm.multiselectOptionStyle },\n [\n _vm._t(\"maxElements\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.maximumOptionsError) +\n \"\\n \"\n )\n ])\n ],\n 2\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.max || _vm.internalValue.length < _vm.max\n ? _vm._l(_vm.filteredOptions, function(option, index) {\n return _c(\n \"li\",\n {\n key: index,\n class: _vm.multiselectElementStyle,\n attrs: {\n id: _vm.id + \"-\" + index,\n role: !(\n option &&\n (option.$isLabel || option.$isDisabled)\n )\n ? \"option\"\n : null\n }\n },\n [\n !(option && (option.$isLabel || option.$isDisabled))\n ? _c(\n \"span\",\n {\n class: _vm.optionHighlight(index, option),\n attrs: {\n \"data-select\":\n option && option.isTag\n ? _vm.tagPlaceholder\n : _vm.selectLabelText,\n \"data-selected\": _vm.selectedLabelText,\n \"data-deselect\": _vm.deselectLabelText\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.select(option)\n },\n mouseenter: function($event) {\n if (\n $event.target !== $event.currentTarget\n ) {\n return null\n }\n return _vm.pointerSet(index)\n }\n }\n },\n [\n _vm._t(\n \"option\",\n [\n _c(\"span\", [\n _vm._v(\n _vm._s(_vm.getOptionLabel(option))\n )\n ])\n ],\n { option: option, search: _vm.search }\n )\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n option && (option.$isLabel || option.$isDisabled)\n ? _c(\n \"span\",\n {\n class: _vm.groupHighlight(index, option),\n attrs: {\n \"data-select\":\n _vm.groupSelect &&\n _vm.selectGroupLabelText,\n \"data-deselect\":\n _vm.groupSelect &&\n _vm.deselectGroupLabelText\n },\n on: {\n mouseenter: function($event) {\n if (\n $event.target !== $event.currentTarget\n ) {\n return null\n }\n _vm.groupSelect && _vm.pointerSet(index)\n },\n mousedown: function($event) {\n $event.preventDefault()\n return _vm.selectGroup(option)\n }\n }\n },\n [\n _vm._t(\n \"option\",\n [\n _c(\"span\", [\n _vm._v(\n _vm._s(_vm.getOptionLabel(option))\n )\n ])\n ],\n { option: option, search: _vm.search }\n )\n ],\n 2\n )\n : _vm._e()\n ]\n )\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showNoOptions &&\n _vm.options.length === 0 &&\n !_vm.search &&\n !_vm.loading\n ? _c(\"li\", [\n _c(\n \"span\",\n { class: _vm.multiselectOptionStyle },\n [\n _vm._t(\"noOptions\", [_vm._v(_vm._s(_vm.listIsEmpty))])\n ],\n 2\n )\n ])\n : _vm._e()\n ],\n 2\n ),\n _vm._v(\" \"),\n _vm._t(\"afterList\")\n ],\n 2\n )\n ])\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.is_open,\n expression: \"is_open\"\n }\n ],\n class: _vm.overlay_classes,\n on: { click: _vm._onOverlayClick }\n },\n [\n _c(\"div\", { class: _vm.modal_classes, style: _vm.modal_style }, [\n _c(\n \"div\",\n { staticClass: \"sweet-box-actions\" },\n [\n _vm._t(\"box-action\"),\n _vm._v(\" \"),\n !_vm.hideCloseButton\n ? _c(\n \"div\",\n {\n staticClass: \"sweet-action-close\",\n on: { click: _vm.close }\n },\n [\n _c(\n \"svg\",\n {\n attrs: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\",\n fill: \"#292c34\"\n }\n })\n ]\n )\n ]\n )\n : _vm._e()\n ],\n 2\n ),\n _vm._v(\" \"),\n _vm.has_title || _vm.has_tabs\n ? _c(\n \"div\",\n { staticClass: \"sweet-title\" },\n [\n _vm.has_tabs && !_vm.has_title\n ? [\n _c(\n \"ul\",\n { staticClass: \"sweet-modal-tabs\" },\n _vm._l(_vm.tabs, function(tab) {\n return _c(\n \"li\",\n { class: _vm._getClassesForTab(tab) },\n [\n _c(\n \"a\",\n {\n attrs: { href: \"#\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm._changeTab(tab)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"sweet-modal-valign\" },\n [\n tab.icon\n ? _c(\"span\", {\n staticClass: \"sweet-modal-tab-icon\",\n domProps: {\n innerHTML: _vm._s(tab.icon)\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"sweet-modal-tab-title\"\n },\n [_vm._v(_vm._s(tab.title))]\n )\n ]\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm.has_title\n ? [\n _vm.title\n ? _c(\"h2\", {\n domProps: { innerHTML: _vm._s(_vm.title) }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._t(\"title\")\n ]\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.has_title && _vm.has_tabs\n ? _c(\n \"ul\",\n { staticClass: \"sweet-modal-tabs\" },\n _vm._l(_vm.tabs, function(tab) {\n return _c(\"li\", { class: _vm._getClassesForTab(tab) }, [\n _c(\n \"a\",\n {\n attrs: { href: \"#\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm._changeTab(tab)\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"sweet-modal-valign\" }, [\n tab.icon\n ? _c(\"span\", {\n staticClass: \"sweet-modal-tab-icon\",\n domProps: { innerHTML: _vm._s(tab.icon) }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"sweet-modal-tab-title\" }, [\n _vm._v(_vm._s(tab.title))\n ])\n ])\n ]\n )\n ])\n }),\n 0\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { ref: \"content\", staticClass: \"sweet-content\" }, [\n _vm.icon == \"error\"\n ? _c(\n \"div\",\n {\n ref: \"icon_error\",\n staticClass: \"sweet-modal-icon sweet-modal-error\"\n },\n [_vm._m(0)]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.icon == \"warning\"\n ? _c(\n \"div\",\n {\n ref: \"icon_warning\",\n staticClass: \"sweet-modal-icon sweet-modal-warning\"\n },\n [\n _c(\"span\", { staticClass: \"sweet-modal-body\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"sweet-modal-dot\" })\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.icon == \"info\"\n ? _c(\"div\", {\n ref: \"icon_info\",\n staticClass: \"sweet-modal-icon sweet-modal-info\"\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.icon == \"success\"\n ? _c(\n \"div\",\n {\n ref: \"icon_success\",\n staticClass: \"sweet-modal-icon sweet-modal-success\"\n },\n [\n _c(\"span\", {\n staticClass: \"sweet-modal-line sweet-modal-tip\"\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n staticClass: \"sweet-modal-line sweet-modal-long\"\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"sweet-modal-placeholder\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"sweet-modal-fix\" })\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.$slots.default\n ? _c(\n \"div\",\n { staticClass: \"sweet-content-content\" },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm.$slots.button\n ? _c(\"div\", { staticClass: \"sweet-buttons\" }, [_vm._t(\"button\")], 2)\n : _vm._e()\n ])\n ]\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticClass: \"sweet-modal-x-mark\" }, [\n _c(\"span\", { staticClass: \"sweet-modal-line sweet-modal-left\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"sweet-modal-line sweet-modal-right\" })\n ])\n }\n]\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: [\"sweet-modal-tab\", { active: _vm.active }] },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\n \"sw-dropdown\",\n { attrs: { \"is-show\": _vm.isShow, variant: \"search-dropdown\" } },\n [\n _c(\n \"sw-input\",\n {\n attrs: {\n slot: \"activator\",\n placeholder: _vm.$t(\"global_search.search\"),\n variant: \"search-input\"\n },\n on: { input: _vm.throttledMethod },\n slot: \"activator\",\n model: {\n value: _vm.name,\n callback: function($$v) {\n _vm.name = $$v\n },\n expression: \"name\"\n }\n },\n [\n _c(\"search-icon\", {\n staticClass: \"h-5 m-1 text-gray-500\",\n attrs: { slot: \"leftIcon\" },\n slot: \"leftIcon\"\n }),\n _vm._v(\" \"),\n _c(\"loading-icon\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isLoading,\n expression: \"isLoading\"\n }\n ],\n staticClass:\n \"absolute right-0 h-5 m-1 animate-spin text-primary-400\",\n attrs: { slot: \"rightIcon\" },\n slot: \"rightIcon\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"w-64 h-40 overflow-y-scroll box\" }, [\n _vm.getCustomerList.length > 0 && !_vm.isLoading\n ? _c(\n \"div\",\n [\n _c(\n \"label\",\n { staticClass: \"text-xs text-gray-400 uppercase\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"global_search.customers\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _vm._l(_vm.getCustomerList, function(d) {\n return _c(\n \"router-link\",\n {\n key: d.id,\n attrs: { to: \"/admin/customers/\" + d.id + \"/view\" }\n },\n [\n _c(\"sw-dropdown-item\", [\n _c(\n \"span\",\n {\n staticClass:\n \"flex items-center justify-center w-8 h-8 mr-4 text-xs font-semibold bg-gray-300 rounded-full text-primary-500\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.initGenerator(d.name)) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n d.contact_name\n ? _c(\"div\", { staticClass: \"flex flex-col\" }, [\n _c(\n \"span\",\n { staticClass: \"text-sm text-black\" },\n [_vm._v(_vm._s(d.name))]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n { staticClass: \"text-xs text-gray-500\" },\n [_vm._v(_vm._s(d.contact_name))]\n )\n ])\n : _c(\n \"div\",\n { staticClass: \"flex items-center\" },\n [\n _c(\n \"span\",\n { staticClass: \"text-sm text-black\" },\n [_vm._v(_vm._s(d.name))]\n )\n ]\n )\n ])\n ],\n 1\n )\n })\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.getUserList.length > 0 && !_vm.isLoading\n ? _c(\n \"div\",\n [\n _c(\n \"label\",\n { staticClass: \"text-xs text-gray-400 uppercase\" },\n [_vm._v(_vm._s(_vm.$t(\"global_search.users\")))]\n ),\n _vm._v(\" \"),\n _vm._l(_vm.getUserList, function(d) {\n return _c(\n \"router-link\",\n {\n key: d.id,\n attrs: { to: \"/admin/users/\" + d.id + \"/edit\" }\n },\n [\n _c(\"sw-dropdown-item\", [\n _c(\n \"span\",\n {\n staticClass:\n \"flex items-center justify-center w-8 h-8 mr-4 text-xs font-semibold bg-gray-300 rounded-full text-primary-500\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.initGenerator(d.name)) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex items-center\" }, [\n _c(\n \"span\",\n { staticClass: \"text-sm text-black\" },\n [_vm._v(_vm._s(d.name))]\n )\n ])\n ])\n ],\n 1\n )\n })\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.getUserList.length === 0 &&\n _vm.getCustomerList.length === 0 &&\n !_vm.isLoading\n ? _c(\"div\", [\n _c(\n \"span\",\n {\n staticClass:\n \"flex items-center justify-center text-sm font-normal text-gray-500\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"global_search.no_results_found\")) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm._e()\n ])\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"relative\" },\n [\n _c(\n \"div\",\n { staticClass: \"absolute bottom-0 right-0 z-10\" },\n [\n _c(\n \"sw-dropdown\",\n {\n staticClass: \"mb-2\",\n attrs: {\n \"close-on-select\": true,\n \"max-height\": \"220\",\n position: \"bottom-end\"\n }\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-2\",\n attrs: {\n slot: \"activator\",\n variant: \"primary-outline\",\n type: \"button\"\n },\n slot: \"activator\"\n },\n [\n _c(\"plus-sm-icon\", { staticClass: \"h-5 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.customization.addresses.insert_fields\")\n ) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex p-2\" },\n _vm._l(_vm.fieldList, function(type, index) {\n return _c(\n \"ul\",\n { key: index, staticClass: \"list-none\" },\n [\n _c(\n \"li\",\n {\n staticClass:\n \"mb-1 ml-2 text-xs font-semibold text-gray-500 uppercase\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(type.label) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _vm._l(type.fields, function(field, index) {\n return _c(\n \"li\",\n {\n key: index,\n staticClass:\n \"w-48 text-sm font-normal cursor-pointer hover:bg-gray-200\",\n on: {\n click: function($event) {\n return _vm.insertField(field.value)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"flex\" },\n [\n _c(\"chevron-double-right-icon\", {\n staticClass: \"h-3 mt-1 text-gray-400\"\n }),\n _vm._v(_vm._s(field.label) + \"\\n \")\n ],\n 1\n )\n ]\n )\n })\n ],\n 2\n )\n }),\n 0\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sw-editor\", {\n staticClass: \"text-area-field\",\n attrs: {\n \"set-editor\": _vm.inputValue,\n disabled: _vm.disabled,\n invalid: _vm.isFieldValid,\n placeholder: _vm.placeholder,\n variant: \"header-editor\",\n \"input-class\": \"border-none\"\n },\n on: {\n input: _vm.handleInput,\n change: _vm.handleChange,\n keyup: _vm.handleKeyupEnter\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"item-selector\" },\n [\n _c(\"sw-select\", {\n ref: \"baseSelect\",\n staticClass: \"multi-select-item\",\n attrs: {\n options: _vm.customers,\n \"show-labels\": false,\n \"preserve-search\": false,\n placeholder: _vm.$t(\"customers.type_or_click\"),\n label: \"name\"\n },\n on: {\n close: _vm.checkCustomers,\n value: _vm.onTextChange,\n select: function(val) {\n return _vm.$emit(\"select\", val)\n },\n remove: _vm.deselectCustomer\n },\n model: {\n value: _vm.customerSelect,\n callback: function($$v) {\n _vm.customerSelect = $$v\n },\n expression: \"customerSelect\"\n }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"sw-date-picker\", {\n ref: \"BaseDatepicker\",\n attrs: {\n config: _vm.config,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled,\n invalid: _vm.invalid,\n name: _vm.name,\n tabindex: _vm.tabindex\n },\n on: { input: _vm.onDateChange },\n model: {\n value: _vm.date,\n callback: function($$v) {\n _vm.date = $$v\n },\n expression: \"date\"\n }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass:\n \"absolute top-0 left-0 z-20 flex items-center justify-center w-full h-full bg-opacity-25 base-loader\",\n class: { \"bg-gray-400\": _vm.showBgOverlay }\n },\n [_vm._m(0)]\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"absolute top-0 left-0 w-full h-full overlay\" },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"absolute flex items-center justify-center ball-scale-ripple-multiple\"\n },\n [_c(\"div\"), _vm._v(\" \"), _c(\"div\"), _vm._v(\" \"), _c(\"div\")]\n )\n ]\n )\n }\n]\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"main\",\n {\n staticClass:\n \"flex flex-col flex-1 p-8 overflow-y-auto border-b border-gray-300 border-solid\"\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"sw-date-picker\", {\n ref: \"BaseDatepicker\",\n attrs: {\n config: _vm.config,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled,\n invalid: _vm.invalid,\n name: _vm.name,\n tabindex: _vm.tabindex\n },\n on: { input: _vm.onDateChange },\n model: {\n value: _vm.time,\n callback: function($$v) {\n _vm.time = $$v\n },\n expression: \"time\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"relative customer-modal\" },\n [\n _vm.isRequestOngoing\n ? _c(\"base-loader\", {\n staticClass: \"h-130\",\n attrs: { \"show-bg-overlay\": true }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.createNewBackup($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"py-2\",\n attrs: {\n label: _vm.$t(\"settings.backup.select_backup_type\"),\n error: _vm.optionError,\n horizontal: \"\",\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.options,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\"settings.backup.select_backup_type\"),\n \"allow-empty\": false,\n maxHeight: 100\n },\n model: {\n value: _vm.formData.option,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"option\", $$v)\n },\n expression: \"formData.option\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"py-2\",\n attrs: {\n label: _vm.$t(\"settings.disk.select_disk\"),\n error: _vm.selectDiskError,\n horizontal: \"\",\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.getDisks,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\"settings.disk.select_disk\"),\n \"allow-empty\": false,\n \"track-by\": \"id\",\n \"preselect-first\": true,\n \"custom-label\": _vm.getCustomLabel,\n maxHeight: 100,\n loading: _vm.isLoading\n },\n model: {\n value: _vm.formData.selected_disk,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"selected_disk\", $$v)\n },\n expression: \"formData.selected_disk\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.cancelBackup }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isCreateLoading,\n variant: \"primary\",\n type: \"submit\",\n disabled: _vm.isCreateLoading\n }\n },\n [\n !_vm.isCreateLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.create\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\n \"sw-modal\",\n {\n ref: \"baseModal\",\n attrs: { variant: _vm.variant },\n scopedSlots: _vm._u([\n {\n key: \"header\",\n fn: function() {\n return [\n _c(\n \"div\",\n {\n staticClass:\n \"absolute flex content-center justify-center w-5 cursor-pointer\",\n staticStyle: { top: \"20px\", right: \"15px\" },\n on: { click: _vm.closeModal }\n },\n [_c(\"x-icon\")],\n 1\n ),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(_vm.modalTitle))])\n ]\n },\n proxy: true\n }\n ])\n },\n [_vm._v(\" \"), _c(_vm.component, { tag: \"component\" })],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitCategoryData($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"p-8 sm:p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"expenses.category\"),\n error: _vm.nameError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"name\",\n attrs: { invalid: _vm.$v.formData.name.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5\",\n attrs: {\n label: _vm.$t(\"expenses.description\"),\n error: _vm.descriptionError,\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-textarea\", {\n attrs: { rows: \"4\", cols: \"50\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.description.$touch()\n }\n },\n model: {\n value: _vm.formData.description,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"description\", $$v)\n },\n expression: \"formData.description\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid border-modal-bg\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3 text-sm\",\n attrs: { type: \"button\", variant: \"primary-outline\" },\n on: { click: _vm.closeCategoryModal }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \")]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n variant: \"primary\",\n type: \"submit\",\n loading: _vm.isLoading\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n !_vm.isEdit\n ? _vm.$t(\"general.save\")\n : _vm.$t(\"general.update\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"custom-field-modal\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitCustomFieldData($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"px-8 py-8 overflow-y-auto sw-scroll sm:p-6\",\n staticStyle: { \"max-height\": \"600px\" }\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.custom_fields.name\"),\n error: _vm.nameError,\n horizontal: \"\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"name\",\n attrs: { invalid: _vm.$v.formData.name.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5\",\n attrs: {\n label: _vm.$t(\"settings.custom_fields.model\"),\n error: _vm.modalTypeError,\n horizontal: \"\",\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.modelTypes,\n invalid: _vm.$v.formData.model_type.$error,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.model_type.$touch()\n }\n },\n model: {\n value: _vm.formData.model_type,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"model_type\", $$v)\n },\n expression: \"formData.model_type\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5\",\n attrs: {\n label: _vm.$t(\"settings.custom_fields.required\"),\n horizontal: \"\"\n }\n },\n [\n _c(\"sw-switch\", {\n staticStyle: { \"margin-top\": \"-20px\" },\n model: {\n value: _vm.formData.is_required,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"is_required\", $$v)\n },\n expression: \"formData.is_required\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5\",\n attrs: {\n label: _vm.$t(\"settings.custom_fields.type\"),\n error: _vm.dataTypeError,\n horizontal: \"\",\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.dataTypes,\n invalid: _vm.$v.selectType.$error,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n \"track-by\": \"label\",\n label: \"label\"\n },\n on: { input: _vm.onSelectTypeChange },\n model: {\n value: _vm.selectType,\n callback: function($$v) {\n _vm.selectType = $$v\n },\n expression: \"selectType\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5\",\n attrs: {\n label: _vm.$t(\"settings.custom_fields.label\"),\n error: _vm.labelError,\n horizontal: \"\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"name\",\n attrs: {\n invalid: _vm.$v.formData.label.$error,\n type: \"text\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.label.$touch()\n }\n },\n model: {\n value: _vm.formData.label,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"label\", $$v)\n },\n expression: \"formData.label\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isDropdownSelected\n ? _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5\",\n attrs: {\n label: _vm.$t(\"settings.custom_fields.options\"),\n horizontal: \"\"\n }\n },\n [\n _c(\"option-create\", { on: { onAdd: _vm.addNewOptions } }),\n _vm._v(\" \"),\n _vm._l(_vm.formData.options, function(option, index) {\n return _c(\n \"div\",\n {\n key: index,\n staticClass: \"flex items-center\",\n staticStyle: { \"margin-top\": \"5px\" }\n },\n [\n _c(\"sw-input\", {\n staticStyle: { width: \"90%\" },\n attrs: { type: \"text\" },\n model: {\n value: option.name,\n callback: function($$v) {\n _vm.$set(option, \"name\", $$v)\n },\n expression: \"option.name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"minus-circle-icon\", {\n staticClass: \"ml-1 cursor-pointer icon text-danger\",\n on: {\n click: function($event) {\n return _vm.removeOption(index)\n }\n }\n })\n ],\n 1\n )\n })\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.formData.type\n ? _c(\n \"sw-input-group\",\n {\n staticClass: \"relative mt-5\",\n attrs: {\n label: _vm.$t(\"settings.custom_fields.default_value\"),\n horizontal: \"\"\n }\n },\n [\n _c(_vm.formData.type + \"Type\", {\n tag: \"component\",\n attrs: {\n value: _vm.formData.default_answer,\n options: _vm.formData.options,\n defaultDateTime: _vm.formData.dateTimeValue\n },\n model: {\n value: _vm.formData.default_answer,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"default_answer\", $$v)\n },\n expression: \"formData.default_answer\"\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.isSwitchTypeSelected\n ? _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5\",\n attrs: {\n label: _vm.$t(\"settings.custom_fields.placeholder\"),\n horizontal: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: { type: \"text\" },\n model: {\n value: _vm.formData.placeholder,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"placeholder\", $$v)\n },\n expression: \"formData.placeholder\"\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5\",\n attrs: {\n label: _vm.$t(\"settings.custom_fields.order\"),\n error: _vm.orderError,\n horizontal: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.order.$error,\n type: \"number\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.order.$touch()\n }\n },\n model: {\n value: _vm.formData.order,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"order\", $$v)\n },\n expression: \"formData.order\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-solid border-gray-light border-modal-bg\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { type: \"button\", variant: \"primary-outline\" },\n on: { click: _vm.closeCategoryModal }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n !_vm.isEdit\n ? _vm.$t(\"general.save\")\n : _vm.$t(\"general.update\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"base-date-picker\", {\n attrs: { \"enable-time\": true },\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"base-date-picker\", {\n attrs: { \"calendar-button\": true, \"calendar-button-icon\": \"calendar\" },\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"sw-select\", {\n attrs: {\n options: _vm.inputOptions,\n taggable: true,\n \"show-labels\": false,\n label: \"name\",\n \"track-by\": \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"sw-input\", {\n attrs: { type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"sw-input\", {\n attrs: { type: \"number\" },\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"flex items-center\", staticStyle: { \"margin-top\": \"5px\" } },\n [\n _c(\"sw-input\", {\n staticStyle: { width: \"90%\" },\n attrs: { type: \"text\" },\n on: {\n handleEnter: function($event) {\n $event.stopPropagation()\n return _vm.onAddOption($event)\n }\n },\n model: {\n value: _vm.option,\n callback: function($$v) {\n _vm.option = $$v\n },\n expression: \"option\"\n }\n }),\n _vm._v(\" \"),\n _c(\"plus-circle-icon\", {\n staticClass: \"ml-1 cursor-pointer text-danger\",\n on: { click: _vm.onAddOption }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"sw-input\", {\n attrs: { type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"sw-switch\", {\n staticClass: \"-mt-3\",\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"sw-textarea\", {\n attrs: { rows: \"2\", name: \"description\" },\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"base-time-picker\", {\n attrs: { value: _vm.inputValue, \"hide-clear-button\": \"\" },\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"sw-input\", {\n attrs: { type: \"url\" },\n on: {\n input: function($event) {\n return _vm.$emit(\"input\", _vm.inputValue)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"customer-modal\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitCustomerData($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"flex-1 p-5 sm:p-6\" },\n [\n _c(\n \"sw-tabs\",\n [\n _c(\n \"sw-tab-item\",\n { staticClass: \"mt-5\", attrs: { title: \"Basic Info\" } },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"customers.display_name\"),\n error: _vm.nameError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"name\",\n staticClass: \"mt-1 md:mt-0\",\n attrs: {\n invalid: _vm.$v.formData.name.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.primary_display_name\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\" },\n model: {\n value: _vm.formData.contact_name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"contact_name\", $$v)\n },\n expression: \"formData.contact_name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"login.email\"),\n error: _vm.emailError,\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: {\n invalid: _vm.$v.formData.email.$error,\n type: \"text\",\n name: \"email\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.email.$touch()\n }\n },\n model: {\n value: _vm.formData.email,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"email\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.email\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$tc(\"settings.currencies.currency\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: {\n options: _vm.currencies,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false,\n placeholder: _vm.$t(\"customers.select_currency\"),\n maxHeight: 200,\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.currency,\n callback: function($$v) {\n _vm.currency = $$v\n },\n expression: \"currency\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.phone\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\", name: \"phone\" },\n model: {\n value: _vm.formData.phone,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"phone\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.website\"),\n error: _vm.websiteError,\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: {\n invalid: _vm.$v.formData.website.$error,\n type: \"url\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.website.$touch()\n }\n },\n model: {\n value: _vm.formData.website,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"website\", $$v)\n },\n expression: \"formData.website\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-tab-item\",\n { staticClass: \"mt-5\", attrs: { title: \"Billing Address\" } },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"customers.name\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\" },\n model: {\n value: _vm.billing.name,\n callback: function($$v) {\n _vm.$set(_vm.billing, \"name\", $$v)\n },\n expression: \"billing.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.phone\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\", name: \"phone\" },\n model: {\n value: _vm.billing.phone,\n callback: function($$v) {\n _vm.$set(\n _vm.billing,\n \"phone\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"billing.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.address\"),\n error: _vm.bill1Error,\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-textarea\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: {\n placeholder: _vm.$t(\"general.street_1\"),\n rows: \"2\",\n cols: \"50\"\n },\n on: {\n input: function($event) {\n return _vm.$v.billing.address_street_1.$touch()\n }\n },\n model: {\n value: _vm.billing.address_street_1,\n callback: function($$v) {\n _vm.$set(_vm.billing, \"address_street_1\", $$v)\n },\n expression: \"billing.address_street_1\"\n }\n }),\n _vm._v(\" \"),\n _c(\"br\")\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: { error: _vm.bill2Error, variant: \"horizontal\" }\n },\n [\n _c(\"sw-textarea\", {\n attrs: {\n placeholder: _vm.$t(\"general.street_2\"),\n rows: \"2\",\n cols: \"50\"\n },\n on: {\n input: function($event) {\n return _vm.$v.billing.address_street_2.$touch()\n }\n },\n model: {\n value: _vm.billing.address_street_2,\n callback: function($$v) {\n _vm.$set(_vm.billing, \"address_street_2\", $$v)\n },\n expression: \"billing.address_street_2\"\n }\n }),\n _vm._v(\" \"),\n _c(\"br\")\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.country\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: {\n options: _vm.countries,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\"general.select_country\"),\n \"allow-empty\": false,\n \"track-by\": \"id\",\n label: \"name\"\n },\n model: {\n value: _vm.billingCountry,\n callback: function($$v) {\n _vm.billingCountry = $$v\n },\n expression: \"billingCountry\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.state\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\", name: \"billingState\" },\n model: {\n value: _vm.billing.state,\n callback: function($$v) {\n _vm.$set(_vm.billing, \"state\", $$v)\n },\n expression: \"billing.state\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.city\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\", name: \"billingCity\" },\n model: {\n value: _vm.billing.city,\n callback: function($$v) {\n _vm.$set(_vm.billing, \"city\", $$v)\n },\n expression: \"billing.city\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.zip_code\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\" },\n model: {\n value: _vm.billing.zip,\n callback: function($$v) {\n _vm.$set(_vm.billing, \"zip\", $$v)\n },\n expression: \"billing.zip\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-tab-item\",\n { staticClass: \"mt-5\", attrs: { title: \"Shipping Address\" } },\n [\n _c(\"div\", { staticClass: \"grid md:grid-cols-12\" }, [\n _c(\n \"div\",\n { staticClass: \"flex justify-end col-span-12\" },\n [\n _c(\n \"sw-button\",\n {\n ref: \"sameAddress\",\n attrs: { variant: \"primary\", type: \"button\" },\n on: {\n click: function($event) {\n return _vm.copyAddress(true)\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"customers.copy_billing_address\")\n ) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.name\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\" },\n model: {\n value: _vm.shipping.name,\n callback: function($$v) {\n _vm.$set(_vm.shipping, \"name\", $$v)\n },\n expression: \"shipping.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.phone\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\", name: \"phone\" },\n model: {\n value: _vm.shipping.phone,\n callback: function($$v) {\n _vm.$set(\n _vm.shipping,\n \"phone\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"shipping.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.address\"),\n error: _vm.ship1Error,\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-textarea\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: {\n placeholder: _vm.$t(\"general.street_1\"),\n rows: \"2\",\n cols: \"50\"\n },\n on: {\n input: function($event) {\n return _vm.$v.shipping.address_street_1.$touch()\n }\n },\n model: {\n value: _vm.shipping.address_street_1,\n callback: function($$v) {\n _vm.$set(_vm.shipping, \"address_street_1\", $$v)\n },\n expression: \"shipping.address_street_1\"\n }\n }),\n _vm._v(\" \"),\n _c(\"br\")\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: { error: _vm.ship2Error, variant: \"horizontal\" }\n },\n [\n _c(\"sw-textarea\", {\n attrs: {\n placeholder: _vm.$t(\"general.street_2\"),\n rows: \"2\",\n cols: \"50\"\n },\n on: {\n input: function($event) {\n return _vm.$v.shipping.address_street_2.$touch()\n }\n },\n model: {\n value: _vm.shipping.address_street_2,\n callback: function($$v) {\n _vm.$set(_vm.shipping, \"address_street_2\", $$v)\n },\n expression: \"shipping.address_street_2\"\n }\n }),\n _vm._v(\" \"),\n _c(\"br\")\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.country\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: {\n options: _vm.countries,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n placeholder: _vm.$t(\"general.select_country\"),\n \"track-by\": \"id\",\n label: \"name\"\n },\n model: {\n value: _vm.shippingCountry,\n callback: function($$v) {\n _vm.shippingCountry = $$v\n },\n expression: \"shippingCountry\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.state\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\", name: \"shippingState\" },\n model: {\n value: _vm.shipping.state,\n callback: function($$v) {\n _vm.$set(_vm.shipping, \"state\", $$v)\n },\n expression: \"shipping.state\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.city\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\", name: \"shippingCity\" },\n model: {\n value: _vm.shipping.city,\n callback: function($$v) {\n _vm.$set(_vm.shipping, \"city\", $$v)\n },\n expression: \"shipping.city\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"customers.zip_code\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1 md:mt-0\",\n attrs: { type: \"text\" },\n model: {\n value: _vm.shipping.zip,\n callback: function($$v) {\n _vm.$set(_vm.shipping, \"zip\", $$v)\n },\n expression: \"shipping.zip\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3 text-sm\",\n attrs: { type: \"button\", variant: \"primary-outline\" },\n on: { click: _vm.cancelCustomer }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n variant: \"primary\",\n type: \"submit\",\n loading: _vm.isLoading\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"template-modal\" }, [\n _c(\"div\", { staticClass: \"px-8 py-8 sm:p-6\" }, [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-3 gap-2 p-1 overflow-x-auto sw-scroll\" },\n _vm._l(_vm.modalData, function(template, index) {\n return _c(\n \"div\",\n {\n key: index,\n staticClass:\n \"relative flex flex-col m-2 border border-gray-200 border-solid cursor-pointer hover:border-primary-300\",\n class: {\n \"border border-solid border-primary-500\":\n _vm.selectedTemplate === template.id\n },\n on: {\n click: function($event) {\n _vm.selectedTemplate = template.id\n }\n }\n },\n [\n _c(\"img\", {\n attrs: { src: template.path, alt: \"template-image\" }\n }),\n _vm._v(\" \"),\n _vm.selectedTemplate === template.id\n ? _c(\"img\", {\n staticClass: \"absolute z-10 w-5 h-5 text-primary-500\",\n staticStyle: { top: \"-6px\", right: \"-5px\" },\n attrs: { src: \"/assets/img/tick.png\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: [\n \"w-full p-1 bg-gray-200 text-sm text-center absolute bottom-0 left-0\",\n {\n \"text-primary-500 bg-primary-100\":\n _vm.selectedTemplate === template.id,\n \"text-gray-600\": _vm.selectedTemplate != template.id\n }\n ]\n },\n [_vm._v(\"\\n \" + _vm._s(template.name) + \"\\n \")]\n )\n ]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\" },\n on: { click: _vm.closeEstimateModal }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \")]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: { variant: \"primary\" },\n on: {\n click: function($event) {\n return _vm.chooseTemplate()\n }\n }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.choose\")) + \"\\n \")]\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"file-disk-modal\" }, [\n _vm.getDiskDrivers.length\n ? _c(\n \"div\",\n [\n _c(_vm.selected_disk, {\n tag: \"component\",\n attrs: {\n loading: _vm.isLoading,\n disks: _vm.getDiskDrivers,\n \"is-edit\": _vm.isEdit\n },\n on: {\n \"on-change-disk\": function(disk) {\n return (_vm.selected_disk = disk.value)\n },\n submit: _vm.createNewDisk\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"default\",\n fn: function(slotProps) {\n return [\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-solid border-gray-light\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3 text-sm\",\n attrs: {\n variant: \"primary-outline\",\n type: \"button\"\n },\n on: { click: _vm.closeDisk }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.cancel\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isRequestFire(slotProps),\n variant: \"primary\",\n disabled: _vm.isRequestFire(slotProps),\n type: \"submit\"\n }\n },\n [\n !_vm.isRequestFire(slotProps)\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.save\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ],\n null,\n false,\n 100721560\n )\n })\n ],\n 1\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"template-modal\" }, [\n _c(\"div\", { staticClass: \"px-8 py-8 sm:p-6\" }, [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-3 gap-2 p-1 overflow-x-auto sw-scroll\" },\n _vm._l(_vm.modalData, function(template, index) {\n return _c(\n \"div\",\n {\n key: index,\n staticClass:\n \"relative flex flex-col m-2 border border-gray-200 border-solid cursor-pointer hover:border-primary-300\",\n class: {\n \"border border-solid border-primary-500\":\n _vm.selectedTemplate === template.id\n },\n on: {\n click: function($event) {\n _vm.selectedTemplate = template.id\n }\n }\n },\n [\n _c(\"img\", {\n attrs: { src: template.path, alt: \"template-image\" }\n }),\n _vm._v(\" \"),\n _vm.selectedTemplate === template.id\n ? _c(\"img\", {\n staticClass: \"absolute z-10 w-5 h-5 text-primary-500\",\n staticStyle: { top: \"-6px\", right: \"-5px\" },\n attrs: { src: \"/assets/img/tick.png\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: [\n \"w-full p-1 bg-gray-200 text-sm text-center absolute bottom-0 left-0\",\n {\n \"text-primary-500 bg-primary-100\":\n _vm.selectedTemplate === template.id,\n \"text-gray-600\": _vm.selectedTemplate != template.id\n }\n ]\n },\n [_vm._v(\"\\n \" + _vm._s(template.name) + \"\\n \")]\n )\n ]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\" },\n on: { click: _vm.closeInvoiceModal }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \")]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: { variant: \"primary\" },\n on: {\n click: function($event) {\n return _vm.chooseTemplate()\n }\n }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.choose\")) + \"\\n \")]\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"item-modal\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitItemData($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"px-8 py-8 sm:p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"items.name\"),\n error: _vm.nameError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"name\",\n attrs: { invalid: _vm.$v.formData.name.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"items.price\"),\n error: _vm.priceError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-money\", {\n staticClass:\n \"relative w-full focus:border focus:border-solid focus:border-primary\",\n attrs: {\n currency: _vm.defaultCurrencyForInput,\n invalid: _vm.$v.formData.price.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.price.$touch()\n }\n },\n model: {\n value: _vm.price,\n callback: function($$v) {\n _vm.price = $$v\n },\n expression: \"price\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: { label: _vm.$t(\"items.unit\"), variant: \"horizontal\" }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.itemUnits,\n searchable: true,\n \"show-labels\": false,\n \"max-height\": 200,\n label: \"name\"\n },\n model: {\n value: _vm.formData.unit,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"unit\", $$v)\n },\n expression: \"formData.unit\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isTexPerItem\n ? _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"items.taxes\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.getTaxTypes,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": true,\n multiple: true,\n label: \"tax_name\"\n },\n model: {\n value: _vm.formData.taxes,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"taxes\", $$v)\n },\n expression: \"formData.taxes\"\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"items.description\"),\n error: _vm.descriptionError,\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-textarea\", {\n attrs: { rows: \"4\", cols: \"50\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.description.$touch()\n }\n },\n model: {\n value: _vm.formData.description,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"description\", $$v)\n },\n expression: \"formData.description\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.closeItemModal }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isEdit\n ? _vm.$t(\"general.update\")\n : _vm.$t(\"general.save\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitItemUnit($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"p-8 sm:p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.customization.items.unit_name\"),\n error: _vm.nameError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"name\",\n attrs: { invalid: _vm.$v.formData.name.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.closeItemUnitModal }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \")]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n variant: \"primary\",\n icon: \"save\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n !_vm.isEdit\n ? _vm.$t(\"general.save\")\n : _vm.$t(\"general.update\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"mail-config-modal\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.onTestMailSend($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"p-4 md:p-8\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-3\",\n attrs: {\n label: _vm.$t(\"general.to\"),\n error: _vm.emailError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"to\",\n attrs: { invalid: _vm.$v.formData.to.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.to.$touch()\n }\n },\n model: {\n value: _vm.formData.to,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"to\", $$v)\n },\n expression: \"formData.to\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-3\",\n attrs: {\n label: _vm.$t(\"general.subject\"),\n error: _vm.subjectError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.subject.$error,\n type: \"text\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.subject.$touch()\n }\n },\n model: {\n value: _vm.formData.subject,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"subject\", $$v)\n },\n expression: \"formData.subject\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-3\",\n attrs: {\n label: _vm.$t(\"general.message\"),\n error: _vm.messageError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-textarea\", {\n attrs: {\n invalid: _vm.$v.formData.message.$error,\n rows: \"4\",\n cols: \"50\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.message.$touch()\n }\n },\n model: {\n value: _vm.formData.message,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"message\", $$v)\n },\n expression: \"formData.message\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\" },\n on: { click: _vm.closeTaxModal }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n variant: \"primary\",\n type: \"submit\",\n loading: _vm.isLoading\n }\n },\n [\n !_vm.isLoading\n ? _c(\"paper-airplane-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n !_vm.isEdit\n ? _vm.$t(\"general.send\")\n : _vm.$t(\"general.update\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"note-modal\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitNote($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"px-8 py-8 sm:p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"settings.customization.notes.name\"),\n error: _vm.nameError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"name\",\n attrs: { invalid: _vm.$v.formData.name.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"settings.customization.notes.type\"),\n error: _vm.typeError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.types,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n model: {\n value: _vm.noteType,\n callback: function($$v) {\n _vm.noteType = $$v\n },\n expression: \"noteType\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.customization.notes.notes\"),\n error: _vm.noteError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"base-custom-input\", {\n staticClass: \"mt-2\",\n attrs: { fields: _vm.fields },\n model: {\n value: _vm.formData.notes,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"notes\", $$v)\n },\n expression: \"formData.notes\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end px-4 py-4 border-t border-solid border-gray-light\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-2\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.closeNoteModal }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n variant: \"primary\",\n icon: \"save\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n !_vm.isEdit\n ? _vm.$t(\"general.save\")\n : _vm.$t(\"general.update\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitPaymentMode($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"p-8 sm:p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.customization.payments.mode_name\"),\n error: _vm.nameError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"name\",\n attrs: { invalid: _vm.$v.formData.name.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.closePaymentModeModal }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \")]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n !_vm.isEdit\n ? _vm.$t(\"general.save\")\n : _vm.$t(\"general.update\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.sendEstimateData($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"px-8 py-8 sm:p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.from\"),\n error: _vm.fromError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: { invalid: _vm.$v.formData.from.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.from.$touch()\n }\n },\n model: {\n value: _vm.formData.from,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"from\", $$v)\n },\n expression: \"formData.from\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.to\"),\n error: _vm.toError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: { invalid: _vm.$v.formData.to.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.to.$touch()\n }\n },\n model: {\n value: _vm.formData.to,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"to\", $$v)\n },\n expression: \"formData.to\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.subject\"),\n error: _vm.subjectError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.subject.$error,\n type: \"text\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.subject.$touch()\n }\n },\n model: {\n value: _vm.formData.subject,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"subject\", $$v)\n },\n expression: \"formData.subject\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.body\"),\n error: _vm.bodyError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"base-custom-input\", {\n staticClass: \"mt-2\",\n attrs: {\n fields: _vm.estimateMailFields,\n invalid: _vm.$v.formData.body.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.body.$touch()\n }\n },\n model: {\n value: _vm.formData.body,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"body\", $$v)\n },\n expression: \"formData.body\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.closeSendEstimateModal }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"paper-airplane-icon\", { staticClass: \"h-5 mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.send\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.sendInvoiceData($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"gap-4 px-8 py-8 sm:p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.from\"),\n error: _vm.fromError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: { invalid: _vm.$v.formData.from.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.from.$touch()\n }\n },\n model: {\n value: _vm.formData.from,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"from\", $$v)\n },\n expression: \"formData.from\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.to\"),\n error: _vm.toError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: { invalid: _vm.$v.formData.to.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.to.$touch()\n }\n },\n model: {\n value: _vm.formData.to,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"to\", $$v)\n },\n expression: \"formData.to\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.subject\"),\n error: _vm.subjectError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.subject.$error,\n type: \"text\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.subject.$touch()\n }\n },\n model: {\n value: _vm.formData.subject,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"subject\", $$v)\n },\n expression: \"formData.subject\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.body\"),\n error: _vm.bodyError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"base-custom-input\", {\n staticClass: \"mt-2\",\n attrs: {\n fields: _vm.InvoiceMailFields,\n invalid: _vm.$v.formData.body.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.body.$touch()\n }\n },\n model: {\n value: _vm.formData.body,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"body\", $$v)\n },\n expression: \"formData.body\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.closeSendInvoiceModal }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"paper-airplane-icon\", { staticClass: \"h-5 mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.send\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.sendPaymentData($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"px-8 py-8 sm:p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.from\"),\n variant: \"vertical\",\n error: _vm.fromError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: { invalid: _vm.$v.formData.from.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.from.$touch()\n }\n },\n model: {\n value: _vm.formData.from,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"from\", $$v)\n },\n expression: \"formData.from\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.to\"),\n error: _vm.toError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: { type: \"text\", invalid: _vm.$v.formData.to.$error },\n on: {\n input: function($event) {\n return _vm.$v.formData.to.$touch()\n }\n },\n model: {\n value: _vm.formData.to,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"to\", $$v)\n },\n expression: \"formData.to\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.subject\"),\n error: _vm.subjectError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.subject.$error,\n type: \"text\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.subject.$touch()\n }\n },\n model: {\n value: _vm.formData.subject,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"subject\", $$v)\n },\n expression: \"formData.subject\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"general.body\"),\n error: _vm.bodyError,\n variant: \"vertical\",\n required: \"\"\n }\n },\n [\n _c(\"sw-editor\", {\n attrs: {\n \"set-editor\": _vm.formData.body,\n invalid: _vm.$v.formData.body.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.body.$touch()\n }\n },\n model: {\n value: _vm.formData.body,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"body\", $$v)\n },\n expression: \"formData.body\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.closeSendPaymentModal }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"paper-airplane-icon\", { staticClass: \"h-5 mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.send\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"file-disk-modal\" }, [\n _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitData($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"px-8 py-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: { label: _vm.$t(\"settings.disk.driver\"), required: \"\" }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.getDisks,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false,\n \"track-by\": \"id\",\n \"custom-label\": _vm.getCustomLabel\n },\n model: {\n value: _vm.selected_disk,\n callback: function($$v) {\n _vm.selected_disk = $$v\n },\n expression: \"selected_disk\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-solid border-gray-light\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3 text-sm\",\n attrs: { type: \"button\", variant: \"primary-outline\" },\n on: { click: _vm.closeDisk }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"text-sm\",\n attrs: {\n loading: _vm.isLoading,\n icon: \"save\",\n type: \"submit\",\n variant: \"primary\"\n }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"tax-type-modal\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitTaxTypeData($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"p-8 sm:p-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-3\",\n attrs: {\n label: _vm.$t(\"tax_types.name\"),\n error: _vm.nameError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n ref: \"name\",\n attrs: { invalid: _vm.$v.formData.name.$error, type: \"text\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-3\",\n attrs: {\n label: _vm.$t(\"tax_types.percent\"),\n error: _vm.percentError,\n variant: \"horizontal\",\n required: \"\"\n }\n },\n [\n _c(\"sw-money\", {\n staticClass:\n \"relative w-full focus:border focus:border-solid focus:border-primary\",\n attrs: {\n currency: _vm.defaultInput,\n invalid: _vm.$v.formData.percent.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.percent.$touch()\n }\n },\n model: {\n value: _vm.formData.percent,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"percent\", $$v)\n },\n expression: \"formData.percent\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-3\",\n attrs: {\n label: _vm.$t(\"tax_types.description\"),\n error: _vm.descriptionError,\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-textarea\", {\n attrs: { rows: \"4\", cols: \"50\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.description.$touch()\n }\n },\n model: {\n value: _vm.formData.description,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"description\", $$v)\n },\n expression: \"formData.description\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-3\",\n attrs: {\n label: _vm.$t(\"tax_types.compound_tax\"),\n variant: \"horizontal\"\n }\n },\n [\n _c(\"sw-switch\", {\n staticClass: \"flex items-center mt-1\",\n model: {\n value: _vm.formData.compound_tax,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"compound_tax\", $$v)\n },\n expression: \"formData.compound_tax\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"z-0 flex justify-end p-4 border-t border-solid border--200 border-modal-bg\"\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3 text-sm\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.closeTaxModal }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.cancel\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n !_vm.isEdit\n ? _vm.$t(\"general.save\")\n : _vm.$t(\"general.update\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitData($event)\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"px-8 py-6\" }, [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n type: \"text\",\n name: \"name\",\n invalid: _vm.$v.name.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.name.$touch()\n }\n },\n model: {\n value: _vm.name,\n callback: function($$v) {\n _vm.name = $$v\n },\n expression: \"name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: { label: _vm.$t(\"settings.disk.driver\"), required: \"\" }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.selected_disk.$error,\n options: _vm.disks,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false,\n \"track-by\": \"value\",\n label: \"name\"\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.selected_disk,\n callback: function($$v) {\n _vm.selected_disk = $$v\n },\n expression: \"selected_disk\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.do_spaces_root\"),\n error: _vm.rootError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.root.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. /user/root/\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.root.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.root,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"root\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.root\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.do_spaces_key\"),\n error: _vm.keyError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.key.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. KEIS4S39SERSDS\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.key.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.key,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"key\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.key\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.do_spaces_secret\"),\n error: _vm.secretError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.secret.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. ********\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.secret.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.secret,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"secret\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.secret\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.do_spaces_region\"),\n error: _vm.regionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.region.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. nyc3\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.region.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.region,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"region\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.region\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.do_spaces_endpoint\"),\n error: _vm.endpointError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.endpoint.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. https://nyc3.digitaloceanspaces.com\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.endpoint.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.endpoint,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"endpoint\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.endpoint\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.do_spaces_bucket\"),\n error: _vm.bucketError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.bucket.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. my-new-space\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.bucket.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.bucket,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"bucket\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.bucket\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n !_vm.isDisabled\n ? _c(\"div\", { staticClass: \"flex items-center mt-6\" }, [\n _c(\n \"div\",\n { staticClass: \"relative flex items-center w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"flex\",\n model: {\n value: _vm.set_as_default,\n callback: function($$v) {\n _vm.set_as_default = $$v\n },\n expression: \"set_as_default\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4 right\" }, [\n _c(\n \"p\",\n {\n staticClass:\n \"p-0 mb-1 text-base leading-snug text-black box-title\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.disk.is_default\")) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm._t(\"default\", null, {\n diskData: { isLoading: _vm.isLoading, submitData: _vm.submitData }\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitData($event)\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"px-8 py-6\" }, [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n type: \"text\",\n name: \"name\",\n invalid: _vm.$v.name.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.name.$touch()\n }\n },\n model: {\n value: _vm.name,\n callback: function($$v) {\n _vm.name = $$v\n },\n expression: \"name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: { label: _vm.$t(\"settings.disk.driver\"), required: \"\" }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.selected_disk.$error,\n options: _vm.disks,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false,\n \"track-by\": \"value\",\n label: \"name\"\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.selected_disk,\n callback: function($$v) {\n _vm.selected_disk = $$v\n },\n expression: \"selected_disk\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.dropbox_root\"),\n error: _vm.rootError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.root.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. /user/root/\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.root.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.root,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"root\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.root\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.dropbox_token\"),\n error: _vm.tokenError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.token.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.token.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.token,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"token\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.token\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.dropbox_key\"),\n error: _vm.keyError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.key.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. KEIS4S39SERSDS\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.key.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.key,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"key\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.key\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.dropbox_secret\"),\n error: _vm.secretError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.secret.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. ********\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.secret.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.secret,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"secret\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.secret\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.dropbox_app\"),\n error: _vm.appError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.app.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.app.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.app,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"app\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.app\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n !_vm.isDisabled\n ? _c(\"div\", { staticClass: \"flex items-center mt-6\" }, [\n _c(\n \"div\",\n { staticClass: \"relative flex items-center w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"flex\",\n model: {\n value: _vm.set_as_default,\n callback: function($$v) {\n _vm.set_as_default = $$v\n },\n expression: \"set_as_default\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4 right\" }, [\n _c(\n \"p\",\n {\n staticClass:\n \"p-0 mb-1 text-base leading-snug text-black box-title\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.disk.is_default\")) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm._t(\"default\", null, {\n diskData: { isLoading: _vm.isLoading, submitData: _vm.submitData }\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitData($event)\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"px-8 py-6\" }, [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n type: \"text\",\n name: \"name\",\n invalid: _vm.$v.name.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.name.$touch()\n }\n },\n model: {\n value: _vm.name,\n callback: function($$v) {\n _vm.name = $$v\n },\n expression: \"name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: { label: _vm.$tc(\"settings.disk.driver\"), required: \"\" }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.selected_disk.$error,\n options: _vm.disks,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false,\n \"track-by\": \"value\",\n label: \"name\"\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.selected_disk,\n callback: function($$v) {\n _vm.selected_disk = $$v\n },\n expression: \"selected_disk\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.local_root\"),\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. /user/root/\"\n },\n model: {\n value: _vm.diskConfigData.root,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"root\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.root\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n !_vm.isDisabled\n ? _c(\"div\", { staticClass: \"flex items-center mt-6\" }, [\n _c(\n \"div\",\n { staticClass: \"relative flex items-center w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"flex\",\n model: {\n value: _vm.set_as_default,\n callback: function($$v) {\n _vm.set_as_default = $$v\n },\n expression: \"set_as_default\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4 right\" }, [\n _c(\n \"p\",\n {\n staticClass:\n \"p-0 mb-1 text-base leading-snug text-black box-title\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.disk.is_default\")) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm._t(\"default\", null, {\n diskData: { isLoading: _vm.isLoading, submitData: _vm.submitData }\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitData($event)\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"px-8 py-6\" }, [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n type: \"text\",\n name: \"name\",\n invalid: _vm.$v.name.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.name.$touch()\n }\n },\n model: {\n value: _vm.name,\n callback: function($$v) {\n _vm.name = $$v\n },\n expression: \"name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: { label: _vm.$tc(\"settings.disk.driver\"), required: \"\" }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.selected_disk.$error,\n options: _vm.disks,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false,\n \"track-by\": \"value\",\n label: \"name\"\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.selected_disk,\n callback: function($$v) {\n _vm.selected_disk = $$v\n },\n expression: \"selected_disk\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.aws_root\"),\n error: _vm.rootError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.root.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. /user/root/\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.root.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.root,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"root\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.root\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.aws_key\"),\n error: _vm.keyError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.key.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. KEIS4S39SERSDS\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.key.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.key,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"key\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.key\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.aws_secret\"),\n error: _vm.secretError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.secret.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. ********\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.secret.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.secret,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"secret\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.secret\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.aws_region\"),\n error: _vm.regionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.region.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. us-west\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.region.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.region,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"region\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.region\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.disk.aws_bucket\"),\n error: _vm.bucketError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.diskConfigData.bucket.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"Ex. AppName\"\n },\n on: {\n input: function($event) {\n return _vm.$v.diskConfigData.bucket.$touch()\n }\n },\n model: {\n value: _vm.diskConfigData.bucket,\n callback: function($$v) {\n _vm.$set(\n _vm.diskConfigData,\n \"bucket\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"diskConfigData.bucket\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n !_vm.isDisabled\n ? _c(\"div\", { staticClass: \"flex items-center mt-6\" }, [\n _c(\n \"div\",\n { staticClass: \"relative flex items-center w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"flex\",\n model: {\n value: _vm.set_as_default,\n callback: function($$v) {\n _vm.set_as_default = $$v\n },\n expression: \"set_as_default\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4 right\" }, [\n _c(\n \"p\",\n {\n staticClass:\n \"p-0 mb-1 text-base leading-snug text-black box-title\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.disk.is_default\")) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm._t(\"default\", null, {\n diskData: { isLoading: _vm.isLoading, submitData: _vm.submitData }\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"customer-select\" }, [\n _c(\"div\", { staticClass: \"flex flex-col w-full pb-4\" }, [\n _c(\n \"div\",\n { staticClass: \"flex px-4 pt-4 pb-2\" },\n [\n _c(\"sw-input\", {\n attrs: {\n placeholder: _vm.$t(\"general.search\"),\n focus: \"\",\n type: \"text\",\n icon: \"search\"\n },\n on: { input: _vm.searchCustomer },\n scopedSlots: _vm._u([\n {\n key: \"leftIcon\",\n fn: function() {\n return [\n _c(\"search-icon\", { staticClass: \"h-5 m-2 text-gray-500\" })\n ]\n },\n proxy: true\n }\n ]),\n model: {\n value: _vm.search,\n callback: function($$v) {\n _vm.search = $$v\n },\n expression: \"search\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.customers.length > 0 && !_vm.loading\n ? _c(\n \"div\",\n {\n staticClass: \"relative flex flex-col overflow-auto sw-scroll list\"\n },\n _vm._l(_vm.customers, function(customer, index) {\n return _c(\n \"div\",\n {\n key: index,\n staticClass:\n \"flex px-6 py-2 border-b border-gray-200 border-solid cursor-pointer hover:cursor-pointer hover:bg-gray-100 last:border-b-0\",\n on: {\n click: function($event) {\n return _vm.selectNewCustomer(customer.id)\n }\n }\n },\n [\n _c(\n \"span\",\n {\n staticClass:\n \"flex items-center content-center justify-center w-10 h-10 mr-4 text-xl font-semibold leading-9 text-white bg-gray-400 rounded-full avatar\"\n },\n [_vm._v(_vm._s(_vm.initGenerator(customer.name)))]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex flex-col justify-center\" }, [\n _c(\n \"label\",\n {\n staticClass:\n \"m-0 leading-tight cursor-pointer font-base\"\n },\n [_vm._v(_vm._s(customer.name))]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"m-0 text-sm font-medium text-gray-500 cursor-pointer font-base\"\n },\n [_vm._v(_vm._s(customer.contact_name))]\n )\n ])\n ]\n )\n }),\n 0\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.loading\n ? _c(\n \"div\",\n { staticClass: \"flex items-center justify-center list\" },\n [_c(\"refresh-icon\", { staticClass: \"animate-spin\" })],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.customers.length === 0\n ? _c(\"div\", { staticClass: \"flex justify-center p-5 text-gray-400\" }, [\n _c(\"label\", { staticClass: \"cursor-pointer\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.no_customers_found\")) +\n \"\\n \"\n )\n ])\n ])\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-2 py-3 bg-gray-200 border-none outline-none\",\n attrs: { type: \"button\" },\n on: { click: _vm.openCustomerModal }\n },\n [\n _c(\"user-add-icon\", { staticClass: \"text-primary-400\" }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"m-0 ml-3 text-sm leading-none cursor-pointer font-base text-primary-400\"\n },\n [_vm._v(_vm._s(_vm.$t(\"customers.add_new_customer\")))]\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"tax-select\" }, [\n _c(\"div\", { staticClass: \"flex flex-col w-full px-4 py-4\" }, [\n _c(\n \"div\",\n { staticClass: \"relative flex w-full mb-2\" },\n [\n _c(\"sw-input\", {\n staticClass: \"text-black\",\n attrs: {\n placeholder: _vm.$t(\"general.search\"),\n focus: \"\",\n icon: \"search\",\n type: \"text\"\n },\n model: {\n value: _vm.textSearch,\n callback: function($$v) {\n _vm.textSearch = $$v\n },\n expression: \"textSearch\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.filteredNotes.length > 0\n ? _c(\n \"div\",\n {\n staticClass:\n \"relative flex flex-col overflow-auto sw-scroll list\",\n staticStyle: { \"max-height\": \"112px\" }\n },\n _vm._l(_vm.filteredNotes, function(note, index) {\n return _c(\n \"div\",\n {\n key: index,\n staticClass:\n \"flex justify-between p-4 border-b border-gray-200 border-solid cursor-pointer list-item last:border-b-0 hover:bg-gray-100\",\n on: {\n click: function($event) {\n return _vm.selectNote(index)\n }\n }\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"inline-block m-0 text-base font-normal leading-tight text-black font-base\"\n },\n [_vm._v(\"\\n \" + _vm._s(note.name) + \"\\n \")]\n )\n ]\n )\n }),\n 0\n )\n : _c(\"div\", { staticClass: \"flex justify-center p-5 text-gray-400\" }, [\n _c(\"label\", { staticClass: \"m-0\" }, [\n _vm._v(_vm._s(_vm.$t(\"general.no_note_found\")))\n ])\n ])\n ]),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-2 py-3 bg-gray-200 border-none outline-none hover:bg-gray-300\",\n attrs: { type: \"button\" },\n on: { click: _vm.openNoteModal }\n },\n [\n _c(\"check-circle-icon\", { staticClass: \"h-5\" }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"m-0 ml-1 text-sm leading-none cursor-pointer font-base text-primary-400\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.customization.notes.add_new_note\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"tax-select\" }, [\n _c(\"div\", { staticClass: \"flex flex-col w-full p-4\" }, [\n _c(\n \"div\",\n { staticClass: \"relative flex w-full mb-2\" },\n [\n _c(\"sw-input\", {\n staticClass: \"text-black\",\n attrs: {\n placeholder: _vm.$t(\"general.search\"),\n focus: \"\",\n icon: \"search\",\n type: \"text\"\n },\n model: {\n value: _vm.textSearch,\n callback: function($$v) {\n _vm.textSearch = $$v\n },\n expression: \"textSearch\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.filteredTaxType.length > 0\n ? _c(\n \"div\",\n {\n staticClass:\n \"relative flex flex-col overflow-auto sw-scroll list\",\n staticStyle: { \"max-height\": \"112px\" }\n },\n _vm._l(_vm.filteredTaxType, function(taxType, index) {\n return _c(\n \"div\",\n {\n key: index,\n staticClass:\n \"flex justify-between p-4 border-b border-gray-200 border-solid cursor-pointer list-item last:border-b-0 hover:bg-gray-100\",\n class: {\n \"bg-gray-100 cursor-not-allowed opacity-50 pointer-events-none\": _vm.taxes.find(\n function(val) {\n return val.tax_type_id === taxType.id\n }\n )\n },\n on: {\n click: function($event) {\n return _vm.selectTaxType(index)\n }\n }\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"inline-block m-0 text-base font-normal leading-tight text-black font-base\"\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(taxType.name) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"inline-block m-0 text-base font-normal leading-tight text-black font-base\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(taxType.percent) +\n \" %\\n \"\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n : _c(\"div\", { staticClass: \"flex justify-center p-5 text-gray-400\" }, [\n _c(\"label\", { staticClass: \"m-0\" }, [\n _vm._v(_vm._s(_vm.$t(\"general.no_tax_found\")))\n ])\n ])\n ]),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-2 py-3 bg-gray-200 border-none outline-none\",\n attrs: { type: \"button\" },\n on: { click: _vm.openTaxModal }\n },\n [\n _c(\"check-circle-icon\", { staticClass: \"h-5\" }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"m-0 ml-3 text-sm leading-none cursor-pointer font-base text-primary-400\"\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"invoices.add_new_tax\")) + \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"graph-container\" }, [\n _c(\"canvas\", { ref: \"graph\", attrs: { id: \"graph\" } })\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"base-date-picker\", {\n attrs: {\n \"calendar-button\": true,\n invalid: _vm.isInvalid,\n placeholder: _vm.placeholder,\n \"calendar-button-icon\": \"calendar\"\n },\n on: { input: _vm.onDateChanged },\n model: {\n value: _vm.date,\n callback: function($$v) {\n _vm.date = $$v\n },\n expression: \"date\"\n }\n }),\n _vm._v(\" \"),\n _vm.isInvalid\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"validation.required\")) + \"\\n \")\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"base-date-picker\", {\n attrs: {\n invalid: _vm.isInvalid,\n \"enable-time\": true,\n placeholder: _vm.placeholder\n },\n on: { input: _vm.onChanged },\n model: {\n value: _vm.dateTime,\n callback: function($$v) {\n _vm.dateTime = $$v\n },\n expression: \"dateTime\"\n }\n }),\n _vm._v(\" \"),\n _vm.isInvalid\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"validation.required\")) + \"\\n \")\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.options,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": true,\n invalid: _vm.isInvalid,\n placeholder: _vm.placeholder,\n tabindex: _vm.tabindex\n },\n on: { select: _vm.onSelectedValueChanged },\n model: {\n value: _vm.selectedValue,\n callback: function($$v) {\n _vm.selectedValue = $$v\n },\n expression: \"selectedValue\"\n }\n }),\n _vm._v(\" \"),\n _vm.isInvalid\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"validation.required\")) + \"\\n \")\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"sw-input\", {\n attrs: {\n type: _vm.type,\n invalid: _vm.isInvalid,\n placeholder: _vm.placeholder,\n tabindex: _vm.tabindex\n },\n on: { input: _vm.handleInput, change: _vm.handleChange },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n }),\n _vm._v(\" \"),\n _vm.isInvalid\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"validation.required\")) + \"\\n \")\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.inputValue.$error || _vm.isInvalid,\n placeholder: _vm.placeholder,\n tabindex: _vm.tabindex,\n type: \"number\"\n },\n on: { input: _vm.handleInput, change: _vm.handleChange },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n }),\n _vm._v(\" \"),\n _vm.$v.inputValue.$error || _vm.isInvalid\n ? _c(\"div\", [\n _vm.isInvalid\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.required\")) +\n \"\\n \"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.isInvalid && _vm.$v.inputValue.numeric\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.required\")) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.inputValue.$error || _vm.isInvalid,\n placeholder: _vm.placeholder,\n tabindex: _vm.tabindex,\n type: \"text\"\n },\n on: { input: _vm.handleInput, change: _vm.handleChange },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n }),\n _vm._v(\" \"),\n _vm.$v.inputValue.$error || _vm.isInvalid\n ? _c(\"div\", [\n !_vm.isInvalid && !_vm.$v.inputValue.phone\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.invalid_phone\")) +\n \"\\n \"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isInvalid\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.required\")) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"sw-switch\", {\n staticClass: \"btn-switch\",\n staticStyle: { \"margin-top\": \"-15px\" },\n on: { change: _vm.onChange },\n model: {\n value: _vm.switchData,\n callback: function($$v) {\n _vm.switchData = $$v\n },\n expression: \"switchData\"\n }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"sw-textarea\", {\n attrs: {\n invalid: _vm.isInvalid,\n placeholder: _vm.placeholder,\n tabindex: _vm.tabindex\n },\n on: { input: _vm.handleInput, change: _vm.handleChange },\n model: {\n value: _vm.text,\n callback: function($$v) {\n _vm.text = $$v\n },\n expression: \"text\"\n }\n }),\n _vm._v(\" \"),\n _vm.isInvalid\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"validation.required\")) + \"\\n \")\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"base-time-picker\", {\n attrs: {\n \"set-value\": _vm.defaultValue,\n invalid: _vm.$v.time.$error,\n placeholder: _vm.placeholder,\n tabindex: _vm.tabindex,\n \"hide-clear-button\": \"\"\n },\n on: { input: _vm.onTimeSelect },\n model: {\n value: _vm.time,\n callback: function($$v) {\n _vm.time = $$v\n },\n expression: \"time\"\n }\n }),\n _vm._v(\" \"),\n _vm.$v.time.$error\n ? _c(\"div\", [\n !_vm.$v.time.required\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.required\")) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.inputValue.$error || _vm.isInvalid,\n placeholder: _vm.placeholder,\n tabindex: _vm.tabindex,\n type: \"url\"\n },\n on: { input: _vm.handleInput, change: _vm.handleChange },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n }),\n _vm._v(\" \"),\n _vm.$v.inputValue.$error || _vm.isInvalid\n ? _c(\"div\", [\n !_vm.$v.inputValue.url\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.invalid_url\")) +\n \"\\n \"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isInvalid\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.required\")) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"125\",\n height: \"110\",\n viewBox: \"0 0 125 110\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"g\", { attrs: { \"clip-path\": \"url(#clip0)\" } }, [\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M46.8031 84.4643C46.8031 88.8034 43.3104 92.3215 39.0026 92.3215C34.6948 92.3215 31.2021 88.8034 31.2021 84.4643C31.2021 80.1252 34.6948 76.6072 39.0026 76.6072C43.3104 76.6072 46.8031 80.1252 46.8031 84.4643Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M60.4536 110H64.3539V72.6785H60.4536V110Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M85.8055 76.6072H70.2045C69.1319 76.6072 68.2544 77.4911 68.2544 78.5715V82.5C68.2544 83.5804 69.1319 84.4643 70.2045 84.4643H85.8055C86.878 84.4643 87.7556 83.5804 87.7556 82.5V78.5715C87.7556 77.4911 86.878 76.6072 85.8055 76.6072ZM70.2045 82.5H85.8055V78.5715H70.2045V82.5Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M91.6556 1.96429C94.8811 1.96429 97.506 4.60821 97.506 7.85714V19.6429H83.8181L85.308 21.6071H99.4561V7.85714C99.4561 3.53571 95.9459 0 91.6556 0H33.152C28.8618 0 25.3516 3.53571 25.3516 7.85714V21.6071H39.3203L40.8745 19.6429H27.3017V7.85714C27.3017 4.60821 29.9265 1.96429 33.152 1.96429H91.6556Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M122.858 92.3213H117.007C115.935 92.3213 115.057 93.2052 115.057 94.2856V102.143C115.057 103.223 115.935 104.107 117.007 104.107H122.858C123.93 104.107 124.808 103.223 124.808 102.143V94.2856C124.808 93.2052 123.93 92.3213 122.858 92.3213ZM117.007 102.143H122.858V94.2856H117.007V102.143Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M103.356 43.2142V70.7142H21.4511V43.2142H26.1821V41.2498H19.501V72.6783H105.306V41.2498H98.3541L98.2839 43.2142H103.356Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M101.406 21.6071C104.632 21.6071 107.257 24.251 107.257 27.5V41.25H98.2257L98.0853 43.2142H109.207V27.5C109.207 23.1609 105.714 19.6428 101.406 19.6428H83.8182L85.0878 21.6071H101.406ZM40.8746 19.6428H23.4016C19.0937 19.6428 15.6011 23.1609 15.6011 27.5V43.2142H26.1961L26.3365 41.25H17.5512V27.5C17.5512 24.251 20.1761 21.6071 23.4016 21.6071H39.3204L40.8746 19.6428Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M62.4041 9.82153C45.1709 9.82153 31.2021 23.8917 31.2021 41.2501C31.2021 58.6085 45.1709 72.6787 62.4041 72.6787C79.6373 72.6787 93.606 58.6085 93.606 41.2501C93.606 23.8917 79.6373 9.82153 62.4041 9.82153ZM62.4041 11.7858C78.5335 11.7858 91.6559 25.0035 91.6559 41.2501C91.6559 57.4967 78.5335 70.7144 62.4041 70.7144C46.2746 70.7144 33.1523 57.4967 33.1523 41.2501C33.1523 25.0035 46.2746 11.7858 62.4041 11.7858Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M62.4041 19.6428C45.1709 19.6428 31.2021 23.8916 31.2021 41.25C31.2021 58.6084 45.1709 66.7857 62.4041 66.7857C79.6373 66.7857 93.606 58.6084 93.606 41.25C93.606 23.8916 79.6373 19.6428 62.4041 19.6428ZM62.4041 21.6071C82.6346 21.6071 91.6559 27.665 91.6559 41.25C91.6559 56.0096 80.7216 64.8214 62.4041 64.8214C44.0866 64.8214 33.1523 56.0096 33.1523 41.25C33.1523 27.665 42.1735 21.6071 62.4041 21.6071Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M101.406 70.7144H23.4014C10.478 70.7144 0 81.2685 0 94.2858V110H124.808V94.2858C124.808 81.2685 114.33 70.7144 101.406 70.7144ZM101.406 72.6786C113.234 72.6786 122.858 82.3724 122.858 94.2858V108.036H1.95012V94.2858C1.95012 82.3724 11.574 72.6786 23.4014 72.6786H101.406Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M33.152 33.3928H29.2518C27.0969 33.3928 25.3516 35.1509 25.3516 37.3214V45.1785C25.3516 47.3491 27.0969 49.1071 29.2518 49.1071H33.152V33.3928ZM31.2019 35.3571V47.1428H29.2518C28.1773 47.1428 27.3017 46.2609 27.3017 45.1785V37.3214C27.3017 36.2391 28.1773 35.3571 29.2518 35.3571H31.2019Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M95.556 33.3928H91.6558V49.1071H95.556C97.7109 49.1071 99.4562 47.3491 99.4562 45.1785V37.3214C99.4562 35.1509 97.7109 33.3928 95.556 33.3928ZM95.556 35.3571C96.6305 35.3571 97.5061 36.2391 97.5061 37.3214V45.1785C97.5061 46.2609 96.6305 47.1428 95.556 47.1428H93.6059V35.3571H95.556Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M94.581 15.7144C94.0447 15.7144 93.606 16.1563 93.606 16.6965V34.3751C93.606 34.9152 94.0447 35.3572 94.581 35.3572C95.1173 35.3572 95.5561 34.9152 95.5561 34.3751V16.6965C95.5561 16.1563 95.1173 15.7144 94.581 15.7144Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M38.0273 41.2499C37.4891 41.2499 37.0522 40.8099 37.0522 40.2678C37.0522 33.3142 44.1409 25.5356 53.6283 25.5356C54.1665 25.5356 54.6033 25.9756 54.6033 26.5178C54.6033 27.0599 54.1665 27.4999 53.6283 27.4999C45.2564 27.4999 39.0024 34.2414 39.0024 40.2678C39.0024 40.8099 38.5655 41.2499 38.0273 41.2499Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M97.5059 110H99.456V72.6785H97.5059V110Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M25.3516 110H27.3017V72.6785H25.3516V110Z\",\n fill: \"#55547A\"\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"defs\", [\n _c(\"clipPath\", { attrs: { id: \"clip0\" } }, [\n _c(\"rect\", {\n attrs: { width: \"124.808\", height: \"110\", fill: \"white\" }\n })\n ])\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"118\",\n height: \"110\",\n viewBox: \"0 0 118 110\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"g\", { attrs: { \"clip-path\": \"url(#clip0)\" } }, [\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M58.6672 32.9999C42.1415 32.9999 32.973 28.5119 32.5898 28.3194L33.4093 26.6804C33.4992 26.7244 42.6127 31.1666 58.6672 31.1666C74.542 31.1666 83.8388 26.7208 83.9323 26.6768L84.7354 28.3231C84.3449 28.5156 74.9618 32.9999 58.6672 32.9999Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M25.2438 39.0117L28.4191 40.8451C28.839 41.0871 29.1415 41.4831 29.2698 41.9597C29.3963 42.4346 29.3321 42.9296 29.0901 43.3494L14.4235 68.7521C14.099 69.3167 13.4866 69.6669 12.8248 69.6669C12.504 69.6669 12.1978 69.5844 11.9191 69.4231L8.74382 67.5897L7.82715 69.1774L11.0025 71.0107C11.5763 71.3426 12.2051 71.5002 12.8248 71.5002C14.0953 71.5002 15.3346 70.8421 16.0111 69.6687L30.6778 44.2661C31.6861 42.5189 31.083 40.2657 29.3358 39.2574L26.1605 37.4241L25.2438 39.0117Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M91.1729 37.4241L87.9976 39.2574C86.2504 40.2657 85.6472 42.5189 86.6556 44.2661L101.322 69.6687C101.999 70.8421 103.238 71.5002 104.509 71.5002C105.128 71.5002 105.757 71.3426 106.331 71.0107L109.506 69.1774L108.59 67.5897L105.414 69.4231C105.139 69.5826 104.826 69.6669 104.509 69.6669C103.847 69.6669 103.234 69.3167 102.91 68.7521L88.2432 43.3494C88.0012 42.9296 87.9371 42.4346 88.0636 41.9597C88.1919 41.4831 88.4944 41.0871 88.9142 40.8451L92.0896 39.0117L91.1729 37.4241Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M115.5 84.3333V87.6993C115.5 89.2797 114.424 90.6308 112.88 90.9883C112.013 91.19 111.049 91.4393 109.96 91.7198C102.573 93.6228 88.8268 97.1667 58.6667 97.1667C28.292 97.1667 14.6942 93.6338 7.38833 91.7345C6.29383 91.4503 5.324 91.1992 4.44767 90.9938C2.90767 90.6363 1.83333 89.2833 1.83333 87.7067V84.3333L0 82.5V87.7067C0 90.134 1.66833 92.2295 4.0315 92.7795C10.9322 94.3873 23.6812 99 58.6667 99C93.3478 99 106.372 94.3818 113.296 92.7758C115.661 92.2258 117.333 90.1285 117.333 87.6993V82.5\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M79.6139 20.1666L115.245 81.7354C115.841 82.7566 115.344 84.0656 114.214 84.4102C107.345 86.4966 89.3159 89.8333 58.6662 89.8333C27.9744 89.8333 9.97652 86.3371 3.12535 84.2526C1.99602 83.9079 1.49919 82.5989 2.09502 81.5778L37.7204 20.1666L36.6662 18.3333L0.503686 80.6666C-0.686148 82.7071 0.322186 85.3251 2.58085 86.0163C9.60985 88.1704 27.7104 91.6666 58.6662 91.6666C89.4625 91.6666 107.664 88.3189 114.742 86.1666C117.008 85.4772 118.022 82.8574 116.829 80.8133L80.6662 18.3333\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M110.814 92.4116L115.245 100.069C115.841 101.089 115.344 102.4 114.214 102.742C107.345 104.831 89.3159 108.167 58.6662 108.167C27.9744 108.167 9.97469 104.671 3.12535 102.585C1.99602 102.242 1.49919 100.931 2.09502 99.9117L6.41985 92.4556L4.75885 91.6672L0.503686 99.0006C-0.686148 101.041 0.322185 103.657 2.58085 104.35C9.60985 106.504 27.7104 110.001 58.6662 110.001C89.4625 110.001 107.664 106.653 114.742 104.501C117.007 103.811 118.022 101.191 116.829 99.1472L112.682 91.9789L110.814 92.4116Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M58.667 0C47.238 0 36.667 7.1335 36.667 18.3407V20.1667C36.667 20.1667 42.6052 23.8333 58.667 23.8333C74.6665 23.8333 80.667 20.1667 80.667 20.1667V18.3333C80.667 7.24167 70.767 0 58.667 0ZM58.667 1.83333C70.3527 1.83333 78.8337 8.7725 78.8337 18.3333V19.0172C76.6887 19.9302 70.5103 22 58.667 22C46.7705 22 40.6197 19.9283 38.5003 19.0227V18.3407C38.5003 12.3658 41.7692 8.55617 44.51 6.41117C48.2317 3.50167 53.3907 1.83333 58.667 1.83333Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M69.6667 53.1666C70.6768 53.1666 71.5 53.9898 71.5 54.9999V89.8333H73.3333V54.9999C73.3333 52.9741 71.6925 51.3333 69.6667 51.3333H47.6667C45.6408 51.3333 44 52.9741 44 54.9999V89.8333H45.8333V54.9999C45.8333 53.9898 46.6565 53.1666 47.6667 53.1666H69.6667Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M58.6667 56.8333C53.6048 56.8333 49.5 60.9381 49.5 65.9999C49.5 71.0618 53.6048 75.1666 58.6667 75.1666C63.7285 75.1666 67.8333 71.0618 67.8333 65.9999C67.8333 60.9381 63.7285 56.8333 58.6667 56.8333ZM58.6667 58.6666C62.711 58.6666 66 61.9556 66 65.9999C66 70.0443 62.711 73.3333 58.6667 73.3333C54.6223 73.3333 51.3333 70.0443 51.3333 65.9999C51.3333 61.9556 54.6223 58.6666 58.6667 58.6666Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M63.2503 66C62.7443 66 62.3337 65.5893 62.3337 65.0833C62.3337 63.5672 61.0998 62.3333 59.5837 62.3333C59.0777 62.3333 58.667 61.9227 58.667 61.4167C58.667 60.9107 59.0777 60.5 59.5837 60.5C62.11 60.5 64.167 62.5552 64.167 65.0833C64.167 65.5893 63.7563 66 63.2503 66Z\",\n fill: \"#817AE3\"\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"defs\", [\n _c(\"clipPath\", { attrs: { id: \"clip0\" } }, [\n _c(\"rect\", {\n attrs: { width: \"117.333\", height: \"110\", fill: \"white\" }\n })\n ])\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"50\",\n height: \"50\",\n viewBox: \"0 0 50 50\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"circle\", { attrs: { cx: \"25\", cy: \"25\", r: \"25\", fill: \"#EAF1FB\" } }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M28.2656 23.0547C27.3021 24.0182 26.1302 24.5 24.75 24.5C23.3698 24.5 22.1849 24.0182 21.1953 23.0547C20.2318 22.0651 19.75 20.8802 19.75 19.5C19.75 18.1198 20.2318 16.9479 21.1953 15.9844C22.1849 14.9948 23.3698 14.5 24.75 14.5C26.1302 14.5 27.3021 14.9948 28.2656 15.9844C29.2552 16.9479 29.75 18.1198 29.75 19.5C29.75 20.8802 29.2552 22.0651 28.2656 23.0547ZM28.2656 25.75C29.6979 25.75 30.9219 26.2708 31.9375 27.3125C32.9792 28.3281 33.5 29.5521 33.5 30.9844V32.625C33.5 33.1458 33.3177 33.5885 32.9531 33.9531C32.5885 34.3177 32.1458 34.5 31.625 34.5H17.875C17.3542 34.5 16.9115 34.3177 16.5469 33.9531C16.1823 33.5885 16 33.1458 16 32.625V30.9844C16 29.5521 16.5078 28.3281 17.5234 27.3125C18.5651 26.2708 19.8021 25.75 21.2344 25.75H21.8984C22.8099 26.1667 23.7604 26.375 24.75 26.375C25.7396 26.375 26.6901 26.1667 27.6016 25.75H28.2656Z\",\n fill: \"#5851D8\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"50\",\n height: \"50\",\n viewBox: \"0 0 50 50\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"circle\", { attrs: { cx: \"25\", cy: \"25\", r: \"25\", fill: \"#FDE4E5\" } }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M27.2031 23.6016C28.349 23.9401 29.2083 24.6562 29.7812 25.75C30.3802 26.8438 30.4714 27.9766 30.0547 29.1484C29.7422 30.0078 29.2083 30.6979 28.4531 31.2188C27.6979 31.7135 26.8516 31.974 25.9141 32V33.875C25.9141 34.0573 25.849 34.2005 25.7188 34.3047C25.6146 34.4349 25.4714 34.5 25.2891 34.5H24.0391C23.8568 34.5 23.7005 34.4349 23.5703 34.3047C23.4661 34.2005 23.4141 34.0573 23.4141 33.875V32C22.1641 32 21.0443 31.6094 20.0547 30.8281C19.8984 30.6979 19.8073 30.5417 19.7812 30.3594C19.7552 30.1771 19.8203 30.0208 19.9766 29.8906L21.3047 28.5625C21.5651 28.3281 21.8255 28.3021 22.0859 28.4844C22.4766 28.7448 22.9193 28.875 23.4141 28.875H25.9922C26.3307 28.875 26.6042 28.7708 26.8125 28.5625C27.0469 28.3281 27.1641 28.0417 27.1641 27.7031C27.1641 27.1302 26.8906 26.7656 26.3438 26.6094L22.3203 25.4375C21.4349 25.1771 20.6927 24.7083 20.0938 24.0312C19.4948 23.3542 19.1432 22.5729 19.0391 21.6875C18.9349 20.4115 19.2995 19.3177 20.1328 18.4062C20.9922 17.4688 22.0599 17 23.3359 17H23.4141V15.125C23.4141 14.9427 23.4661 14.7995 23.5703 14.6953C23.7005 14.5651 23.8568 14.5 24.0391 14.5H25.2891C25.4714 14.5 25.6146 14.5651 25.7188 14.6953C25.849 14.7995 25.9141 14.9427 25.9141 15.125V17C27.1641 17 28.2839 17.3906 29.2734 18.1719C29.4297 18.3021 29.5208 18.4583 29.5469 18.6406C29.5729 18.8229 29.5078 18.9792 29.3516 19.1094L28.0234 20.4375C27.763 20.6719 27.5026 20.6979 27.2422 20.5156C26.8516 20.2552 26.4089 20.125 25.9141 20.125H23.3359C22.9974 20.125 22.7109 20.2422 22.4766 20.4766C22.2682 20.6849 22.1641 20.9583 22.1641 21.2969C22.1641 21.5312 22.2422 21.7526 22.3984 21.9609C22.5547 22.1693 22.75 22.3125 22.9844 22.3906L27.2031 23.6016Z\",\n fill: \"#FB7178\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\"div\", { staticClass: \"dot-icon\", on: { click: _vm.checktoggle } }, [\n _c(\"span\", {\n staticClass: \"dot dot1\",\n class: { \"move-right\": _vm.toggle }\n }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"dot dot2\" }),\n _vm._v(\" \"),\n _c(\"span\", {\n staticClass: \"dot dot3\",\n class: { \"move-left\": _vm.toggle }\n })\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n staticClass: \"svg-inline--fa fa-grip-vertical fa-w-10\",\n attrs: {\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n \"data-prefix\": \"fas\",\n \"data-icon\": \"grip-vertical\",\n role: \"img\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 320 512\",\n width: \"15\",\n height: \"15\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n fill: \"currentColor\",\n d:\n \"M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"50\",\n height: \"50\",\n viewBox: \"0 0 50 50\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"circle\", { attrs: { cx: \"25\", cy: \"25\", r: \"25\", fill: \"#EAF1FB\" } }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M26.75 19.8125C26.75 20.0729 26.8411 20.2943 27.0234 20.4766C27.2057 20.6589 27.4271 20.75 27.6875 20.75H33V33.5625C33 33.8229 32.9089 34.0443 32.7266 34.2266C32.5443 34.4089 32.3229 34.5 32.0625 34.5H18.9375C18.6771 34.5 18.4557 34.4089 18.2734 34.2266C18.0911 34.0443 18 33.8229 18 33.5625V15.4375C18 15.1771 18.0911 14.9557 18.2734 14.7734C18.4557 14.5911 18.6771 14.5 18.9375 14.5H26.75V19.8125ZM33 19.2656V19.5H28V14.5H28.2344C28.4948 14.5 28.7161 14.5911 28.8984 14.7734L32.7266 18.6016C32.9089 18.7839 33 19.0052 33 19.2656Z\",\n fill: \"#5851D8\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"50\",\n height: \"50\",\n viewBox: \"0 0 50 50\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"circle\", { attrs: { cx: \"25\", cy: \"25\", r: \"25\", fill: \"#EAF1FB\" } }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M28.25 24.5V27H20.75V24.5H28.25ZM31.7266 18.6016C31.9089 18.7839 32 19.0052 32 19.2656V19.5H27V14.5H27.2344C27.4948 14.5 27.7161 14.5911 27.8984 14.7734L31.7266 18.6016ZM25.75 19.8125C25.75 20.0729 25.8411 20.2943 26.0234 20.4766C26.2057 20.6589 26.4271 20.75 26.6875 20.75H32V33.5625C32 33.8229 31.9089 34.0443 31.7266 34.2266C31.5443 34.4089 31.3229 34.5 31.0625 34.5H17.9375C17.6771 34.5 17.4557 34.4089 17.2734 34.2266C17.0911 34.0443 17 33.8229 17 33.5625V15.4375C17 15.1771 17.0911 14.9557 17.2734 14.7734C17.4557 14.5911 17.6771 14.5 17.9375 14.5H25.75V19.8125ZM19.5 17.3125V17.9375C19.5 18.1458 19.6042 18.25 19.8125 18.25H22.9375C23.1458 18.25 23.25 18.1458 23.25 17.9375V17.3125C23.25 17.1042 23.1458 17 22.9375 17H19.8125C19.6042 17 19.5 17.1042 19.5 17.3125ZM19.5 19.8125V20.4375C19.5 20.6458 19.6042 20.75 19.8125 20.75H22.9375C23.1458 20.75 23.25 20.6458 23.25 20.4375V19.8125C23.25 19.6042 23.1458 19.5 22.9375 19.5H19.8125C19.6042 19.5 19.5 19.6042 19.5 19.8125ZM29.5 31.6875V31.0625C29.5 30.8542 29.3958 30.75 29.1875 30.75H26.0625C25.8542 30.75 25.75 30.8542 25.75 31.0625V31.6875C25.75 31.8958 25.8542 32 26.0625 32H29.1875C29.3958 32 29.5 31.8958 29.5 31.6875ZM29.5 23.875C29.5 23.6927 29.4349 23.5495 29.3047 23.4453C29.2005 23.3151 29.0573 23.25 28.875 23.25H20.125C19.9427 23.25 19.7865 23.3151 19.6562 23.4453C19.5521 23.5495 19.5 23.6927 19.5 23.875V27.625C19.5 27.8073 19.5521 27.9635 19.6562 28.0938C19.7865 28.1979 19.9427 28.25 20.125 28.25H28.875C29.0573 28.25 29.2005 28.1979 29.3047 28.0938C29.4349 27.9635 29.5 27.8073 29.5 27.625V23.875Z\",\n fill: \"#5851D8\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\"\n }\n },\n [\n _c(\"circle\", {\n staticClass: \"opacity-25\",\n attrs: {\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n \"stroke-width\": \"4\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n staticClass: \"opacity-75\",\n attrs: {\n fill: \"currentColor\",\n d:\n \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"154\",\n height: \"110\",\n viewBox: \"0 0 154 110\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"g\", { attrs: { \"clip-path\": \"url(#clip0)\" } }, [\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M33.4784 93.2609C33.4784 94.5809 32.4071 95.6522 31.0871 95.6522C29.7671 95.6522 28.6958 94.5809 28.6958 93.2609C28.6958 91.9409 29.7671 90.8696 31.0871 90.8696C32.4071 90.8696 33.4784 91.9409 33.4784 93.2609Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M78.913 93.2609C78.913 94.5809 77.8417 95.6522 76.5217 95.6522C75.2017 95.6522 74.1304 94.5809 74.1304 93.2609C74.1304 91.9409 75.2017 90.8696 76.5217 90.8696C77.8417 90.8696 78.913 91.9409 78.913 93.2609Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M124.348 93.2609C124.348 94.5809 123.277 95.6522 121.957 95.6522C120.637 95.6522 119.565 94.5809 119.565 93.2609C119.565 91.9409 120.637 90.8696 121.957 90.8696C123.277 90.8696 124.348 91.9409 124.348 93.2609Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M148.261 54.9999C149.578 54.9999 150.652 56.0736 150.652 57.3913V83.6956C150.652 87.658 147.441 90.8695 143.478 90.8695H137.352V93.2608H143.478C148.761 93.2608 153.043 88.978 153.043 83.6956V57.3913C153.043 54.7489 150.903 52.6086 148.261 52.6086H4.78261C2.14022 52.6086 0 54.7489 0 57.3913V83.6956C0 88.978 4.28283 93.2608 9.56522 93.2608H15.4478V90.8695H9.56522C5.60283 90.8695 2.3913 87.658 2.3913 83.6956V57.3913C2.3913 56.0713 3.46261 54.9999 4.78261 54.9999H148.261ZM106.243 90.8695H91.7113L92.1011 93.2608H106.145L106.243 90.8695ZM60.8946 90.8695H46.5587L46.4607 93.2608H60.6985L60.8946 90.8695Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M38.2611 45.4348H23.9133C22.5933 45.4348 21.522 46.5061 21.522 47.8261V52.6087C21.522 53.9287 22.5933 55 23.9133 55H38.2611C39.5811 55 40.6524 53.9287 40.6524 52.6087V47.8261C40.6524 46.5061 39.5811 45.4348 38.2611 45.4348ZM23.9133 52.6087H38.2611V47.8261H23.9133V52.6087Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M28.6957 62.174C28.6957 63.494 27.6244 64.5653 26.3044 64.5653C24.9844 64.5653 23.9131 63.494 23.9131 62.174C23.9131 60.854 24.9844 59.7827 26.3044 59.7827C27.6244 59.7827 28.6957 60.854 28.6957 62.174Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M38.2606 62.174C38.2606 63.494 37.1893 64.5653 35.8693 64.5653C34.5493 64.5653 33.478 63.494 33.478 62.174C33.478 60.854 34.5493 59.7827 35.8693 59.7827C37.1893 59.7827 38.2606 60.854 38.2606 62.174Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M59.7826 64.5653H45.4348C44.1195 64.5653 43.0435 63.4892 43.0435 62.174C43.0435 60.8588 44.1195 59.7827 45.4348 59.7827H59.7826C61.0978 59.7827 62.1739 60.8588 62.1739 62.174C62.1739 63.4892 61.0978 64.5653 59.7826 64.5653Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M101.793 40.0497L118.533 11.354L119.982 13.6162L104.754 39.722L101.793 40.0497Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M110.163 40.0496L124.556 15.3761L127.383 15.2781L112.973 39.9826L110.163 40.0496Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M74.1304 7.17402H119.565V4.78271H74.1304V7.17402Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M74.1304 14.3478H119.565V11.9565H74.1304V14.3478Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M71.7389 2.3913V16.7391H50.2172C48.8996 16.7391 47.8259 15.6654 47.8259 14.3478V11.9565H45.4346V14.3478C45.4346 16.9902 47.5748 19.1304 50.2172 19.1304H74.1302V0H50.2172C47.5748 0 45.4346 2.14022 45.4346 4.78261V7.17391H47.8259V4.78261C47.8259 3.465 48.8996 2.3913 50.2172 2.3913H71.7389Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M124.348 2.39136C120.385 2.39136 117.174 5.60288 117.174 9.56527C117.174 13.5277 120.385 16.7392 124.348 16.7392C128.31 16.7392 131.522 13.5277 131.522 9.56527C131.522 5.60288 128.31 2.39136 124.348 2.39136ZM124.348 4.78266C126.985 4.78266 129.13 6.92766 129.13 9.56527C129.13 12.2029 126.985 14.3479 124.348 14.3479C121.71 14.3479 119.565 12.2029 119.565 9.56527C119.565 6.92766 121.71 4.78266 124.348 4.78266Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M108.902 38.261C98.1965 38.261 89.1358 45.2986 86.0869 55.0001H131.718C128.669 45.2986 119.608 38.261 108.902 38.261ZM108.902 40.6523C117.219 40.6523 124.608 45.3416 128.191 52.6088H89.6141C93.1963 45.3416 100.585 40.6523 108.902 40.6523Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M31.0868 76.5217C21.842 76.5217 14.3477 84.0161 14.3477 93.2609C14.3477 102.506 21.842 110 31.0868 110C40.3316 110 47.8259 102.506 47.8259 93.2609C47.8259 84.0161 40.3316 76.5217 31.0868 76.5217ZM31.0868 78.913C38.9972 78.913 45.4346 85.3504 45.4346 93.2609C45.4346 101.171 38.9972 107.609 31.0868 107.609C23.1764 107.609 16.739 101.171 16.739 93.2609C16.739 85.3504 23.1764 78.913 31.0868 78.913Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M121.956 76.5217C112.712 76.5217 105.217 84.0161 105.217 93.2609C105.217 102.506 112.712 110 121.956 110C131.201 110 138.696 102.506 138.696 93.2609C138.696 84.0161 131.201 76.5217 121.956 76.5217ZM121.956 78.913C129.867 78.913 136.304 85.3504 136.304 93.2609C136.304 101.171 129.867 107.609 121.956 107.609C114.046 107.609 107.609 101.171 107.609 93.2609C107.609 85.3504 114.046 78.913 121.956 78.913Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M76.5218 76.5217C67.2771 76.5217 59.7827 84.0161 59.7827 93.2609C59.7827 102.506 67.2771 110 76.5218 110C85.7666 110 93.261 102.506 93.261 93.2609C93.261 84.0161 85.7666 76.5217 76.5218 76.5217ZM76.5218 78.913C84.4323 78.913 90.8697 85.3504 90.8697 93.2609C90.8697 101.171 84.4323 107.609 76.5218 107.609C68.6114 107.609 62.174 101.171 62.174 93.2609C62.174 85.3504 68.6114 78.913 76.5218 78.913Z\",\n fill: \"#55547A\"\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"defs\", [\n _c(\"clipPath\", { attrs: { id: \"clip0\" } }, [\n _c(\"rect\", {\n attrs: { width: \"153.043\", height: \"110\", fill: \"white\" }\n })\n ])\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"97\",\n height: \"110\",\n viewBox: \"0 0 97 110\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"g\", { attrs: { \"clip-path\": \"url(#clip0)\" } }, [\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M41.25 104.844H55V84.2188H41.25V104.844ZM42.9688 103.125H53.2813V85.9375H42.9688V103.125Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M0 110H96.25V103.125H0V110ZM1.71875 108.281H94.5312V104.844H1.71875V108.281Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M34.375 8.59375H61.875V6.875H34.375V8.59375Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M48.125 15.4688C42.4291 15.4688 37.8125 20.0853 37.8125 25.7812C37.8125 31.4772 42.4291 36.0938 48.125 36.0938C53.8209 36.0938 58.4375 31.4772 58.4375 25.7812C58.4375 20.0853 53.8209 15.4688 48.125 15.4688ZM48.125 17.1875C52.8636 17.1875 56.7188 21.0427 56.7188 25.7812C56.7188 30.5198 52.8636 34.375 48.125 34.375C43.3864 34.375 39.5312 30.5198 39.5312 25.7812C39.5312 21.0427 43.3864 17.1875 48.125 17.1875Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M12.8906 63.5938C12.418 63.5938 12.0312 63.207 12.0312 62.7344V55.8594C12.0312 55.3867 12.418 55 12.8906 55C13.3633 55 13.75 55.3867 13.75 55.8594V62.7344C13.75 63.207 13.3633 63.5938 12.8906 63.5938Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M21.4844 63.5938C21.0117 63.5938 20.625 63.207 20.625 62.7344V55.8594C20.625 55.3867 21.0117 55 21.4844 55C21.957 55 22.3438 55.3867 22.3438 55.8594V62.7344C22.3438 63.207 21.957 63.5938 21.4844 63.5938Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M30.0781 63.5938C29.6055 63.5938 29.2188 63.207 29.2188 62.7344V55.8594C29.2188 55.3867 29.6055 55 30.0781 55C30.5508 55 30.9375 55.3867 30.9375 55.8594V62.7344C30.9375 63.207 30.5508 63.5938 30.0781 63.5938Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M38.6719 63.5938C38.1992 63.5938 37.8125 63.207 37.8125 62.7344V55.8594C37.8125 55.3867 38.1992 55 38.6719 55C39.1445 55 39.5312 55.3867 39.5312 55.8594V62.7344C39.5312 63.207 39.1445 63.5938 38.6719 63.5938Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M47.2656 63.5938C46.793 63.5938 46.4062 63.207 46.4062 62.7344V55.8594C46.4062 55.3867 46.793 55 47.2656 55C47.7383 55 48.125 55.3867 48.125 55.8594V62.7344C48.125 63.207 47.7383 63.5938 47.2656 63.5938Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M55.8594 63.5938C55.3867 63.5938 55 63.207 55 62.7344V55.8594C55 55.3867 55.3867 55 55.8594 55C56.332 55 56.7187 55.3867 56.7187 55.8594V62.7344C56.7187 63.207 56.332 63.5938 55.8594 63.5938Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M64.4531 63.5938C63.9805 63.5938 63.5938 63.207 63.5938 62.7344V55.8594C63.5938 55.3867 63.9805 55 64.4531 55C64.9258 55 65.3125 55.3867 65.3125 55.8594V62.7344C65.3125 63.207 64.9258 63.5938 64.4531 63.5938Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M73.0469 63.5938C72.5742 63.5938 72.1875 63.207 72.1875 62.7344V55.8594C72.1875 55.3867 72.5742 55 73.0469 55C73.5195 55 73.9062 55.3867 73.9062 55.8594V62.7344C73.9062 63.207 73.5195 63.5938 73.0469 63.5938Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M81.6406 63.5938C81.168 63.5938 80.7812 63.207 80.7812 62.7344V55.8594C80.7812 55.3867 81.168 55 81.6406 55C82.1133 55 82.5 55.3867 82.5 55.8594V62.7344C82.5 63.207 82.1133 63.5938 81.6406 63.5938Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M3.4375 103.125H5.15625V56.7188H3.4375V103.125Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M91.0938 103.125H92.8125V56.7188H91.0938V103.125Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M34.375 0C17.2098 0.9075 3.4375 15.2745 3.4375 32.6562V51.5625H34.375V0ZM32.6562 1.86484V49.8438H5.15625V32.6562C5.15625 16.7853 17.0947 3.59391 32.6562 1.86484Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M61.875 0V51.5625H92.8125V32.6562C92.8125 15.2745 79.0402 0.9075 61.875 0ZM63.5938 1.86484C79.1553 3.59391 91.0938 16.7853 91.0938 32.6562V49.8438H63.5938V1.86484Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M9.45312 34.375C8.97875 34.375 8.59375 33.99 8.59375 33.5157C8.59375 22.9316 13.6262 14.1247 22.7648 8.71238C23.1756 8.47347 23.7033 8.60925 23.9422 9.01488C24.1845 9.42222 24.0487 9.9516 23.6414 10.1939C14.9222 15.3553 10.3125 23.4197 10.3125 33.5157C10.3125 33.99 9.9275 34.375 9.45312 34.375Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M54.1406 25.7812C53.6663 25.7812 53.2813 25.3962 53.2813 24.9219C53.2813 22.8748 51.0314 20.625 48.9844 20.625C48.51 20.625 48.125 20.24 48.125 19.7656C48.125 19.2913 48.51 18.9062 48.9844 18.9062C51.963 18.9062 55 21.9433 55 24.9219C55 25.3962 54.615 25.7812 54.1406 25.7812Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M0 56.7188H96.25V49.8438H0V56.7188ZM1.71875 55H94.5312V51.5625H1.71875V55Z\",\n fill: \"#817AE3\"\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"defs\", [\n _c(\"clipPath\", { attrs: { id: \"clip0\" } }, [\n _c(\"rect\", {\n attrs: { width: \"96.25\", height: \"110\", fill: \"white\" }\n })\n ])\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"110\",\n height: \"110\",\n viewBox: \"0 0 110 110\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"g\", { attrs: { \"clip-path\": \"url(#clip0)\" } }, [\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M5.76398 22.9512L4.54883 21.7361L21.7363 4.54858L22.9515 5.76374L5.76398 22.9512Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M88.264 105.451L87.0488 104.236L104.236 87.0486L105.451 88.2637L88.264 105.451Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M29.8265 81.3887L28.6113 80.1736L38.9238 69.8611L40.139 71.0762L29.8265 81.3887Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M30.9375 81.6406C30.9375 83.0637 29.7825 84.2188 28.3594 84.2188C26.9362 84.2188 25.7812 83.0637 25.7812 81.6406C25.7812 80.2175 26.9362 79.0625 28.3594 79.0625C29.7825 79.0625 30.9375 80.2175 30.9375 81.6406Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M77.3435 61.5801C76.4635 61.5801 75.5835 61.9152 74.9132 62.5873L62.5863 74.9124C61.244 76.2548 61.244 78.4324 62.5863 79.7748L92.8123 110.001L110 92.8132L79.7738 62.5873C79.1035 61.9152 78.2235 61.5801 77.3435 61.5801ZM77.3435 63.2988C77.8024 63.2988 78.2338 63.4776 78.5587 63.8024L107.569 92.8132L92.8123 107.569L63.8015 78.5596C63.4767 78.2348 63.2979 77.8034 63.2979 77.3445C63.2979 76.8838 63.4767 76.4524 63.8015 76.1276L76.1284 63.8024C76.4532 63.4776 76.8846 63.2988 77.3435 63.2988Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M17.1875 0L0 17.1875L30.2259 47.4134C30.8963 48.0838 31.7763 48.4206 32.6562 48.4206C33.5363 48.4206 34.4162 48.0838 35.0866 47.4134L47.4134 35.0866C48.7558 33.7442 48.7558 31.5683 47.4134 30.2259L17.1875 0ZM17.1875 2.43031L46.1983 31.4411C46.5231 31.7659 46.7019 32.1973 46.7019 32.6562C46.7019 33.1152 46.5231 33.5466 46.1983 33.8714L33.8714 46.1983C33.5466 46.5231 33.1152 46.7019 32.6562 46.7019C32.1973 46.7019 31.7659 46.5231 31.4411 46.1983L2.43031 17.1875L17.1875 2.43031Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M60.156 28.9238C59.276 28.9238 58.396 29.259 57.7257 29.931L29.9301 57.7249C28.5878 59.0673 28.5878 61.2449 29.9301 62.5873L47.4132 80.0687C48.0835 80.7407 48.9635 81.0759 49.8435 81.0759C50.7235 81.0759 51.6035 80.7407 52.2738 80.0687L80.0695 52.2748C81.4118 50.9324 81.4118 48.7548 80.0695 47.4124L62.5863 29.931C61.916 29.259 61.036 28.9238 60.156 28.9238ZM60.156 30.6426C60.6149 30.6426 61.0463 30.8213 61.3712 31.1462L78.8543 48.6276C79.1792 48.9524 79.3579 49.3838 79.3579 49.8445C79.3579 50.3034 79.1792 50.7348 78.8543 51.0596L51.0587 78.8535C50.7338 79.1784 50.3024 79.3571 49.8435 79.3571C49.3846 79.3571 48.9532 79.1784 48.6284 78.8535L31.1453 61.3721C30.8204 61.0473 30.6417 60.6159 30.6417 60.157C30.6417 59.6963 30.8204 59.2649 31.1453 58.9401L58.9409 31.1462C59.2657 30.8213 59.6971 30.6426 60.156 30.6426Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M71.0765 40.1387L69.8613 38.9236L72.4395 36.3455L73.6546 37.5606L71.0765 40.1387Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M72.9858 24.8608C69.6291 28.2176 69.6291 33.6574 72.9858 37.0141C74.6633 38.6916 76.8633 39.5321 79.0633 39.5321C81.2616 39.5321 83.4616 38.6916 85.1391 37.0141L72.9858 24.8608ZM73.1388 27.4441L82.5558 36.8612C81.5091 37.4816 80.3111 37.8133 79.0633 37.8133C77.226 37.8133 75.5003 37.0966 74.201 35.799C72.9033 34.4996 72.1883 32.774 72.1883 30.9383C72.1883 29.6888 72.5183 28.4908 73.1388 27.4441Z\",\n fill: \"#55547A\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M86.1459 32.0051C85.9259 32.0051 85.7059 31.9209 85.5374 31.7542C85.2023 31.4173 85.2023 30.8742 85.5374 30.5373C86.3504 29.7261 86.7973 28.6467 86.7973 27.5003C86.7973 26.3522 86.3504 25.2728 85.5374 24.4615C83.9149 22.839 81.0859 22.839 79.4616 24.4615C79.1265 24.7984 78.5834 24.7984 78.2465 24.4615C77.9113 24.1264 77.9113 23.5833 78.2465 23.2464C80.5187 20.9742 84.4821 20.9742 86.7543 23.2464C87.8904 24.3825 88.516 25.8933 88.516 27.5003C88.516 29.1073 87.8904 30.6181 86.7543 31.7542C86.5859 31.9209 86.3659 32.0051 86.1459 32.0051Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M89.792 35.6514C89.572 35.6514 89.352 35.5672 89.1836 35.4004C88.8484 35.0636 88.8484 34.5204 89.1836 34.1836C90.9711 32.3978 91.9525 30.0259 91.9525 27.4994C91.9525 24.9745 90.9711 22.6009 89.1836 20.8151C87.3978 19.0294 85.0259 18.0462 82.4994 18.0462C79.9745 18.0462 77.6009 19.0294 75.8152 20.8151C75.48 21.1503 74.9352 21.1503 74.6 20.8151C74.2648 20.48 74.2648 19.9351 74.6 19.6C78.9553 15.2447 86.0434 15.2447 90.4005 19.6C94.7558 23.9553 94.7558 31.0434 90.4005 35.4004C90.232 35.5672 90.012 35.6514 89.792 35.6514Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M93.4379 39.297C93.2179 39.297 92.9979 39.2128 92.8295 39.0461C92.4944 38.7092 92.4944 38.1661 92.8295 37.8292C95.5898 35.0706 97.1092 31.4028 97.1092 27.4995C97.1092 23.5979 95.5898 19.9284 92.8295 17.1698C90.0709 14.4112 86.4031 12.8901 82.4998 12.8901C78.5983 12.8901 74.9287 14.4112 72.1701 17.1698C71.835 17.505 71.2901 17.505 70.955 17.1698C70.6198 16.8347 70.6198 16.2898 70.955 15.9547C74.0384 12.8712 78.1394 11.1714 82.4998 11.1714C86.862 11.1714 90.9612 12.8712 94.0464 15.9547C97.1298 19.0381 98.8279 23.139 98.8279 27.4995C98.8279 31.8617 97.1298 35.9609 94.0464 39.0461C93.8779 39.2128 93.6579 39.297 93.4379 39.297Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M39.7832 40.9981L8.8457 10.0606L10.0609 8.84546L40.9984 39.783L39.7832 40.9981Z\",\n fill: \"#817AE3\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d:\n \"M99.9395 101.154L69.002 70.2169L70.2171 69.0017L101.155 99.9392L99.9395 101.154Z\",\n fill: \"#817AE3\"\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"defs\", [\n _c(\"clipPath\", { attrs: { id: \"clip0\" } }, [\n _c(\"rect\", { attrs: { width: \"110\", height: \"110\", fill: \"white\" } })\n ])\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n staticClass: \"svg-inline--fa fa-save fa-w-14\",\n attrs: {\n width: \"20\",\n height: \"15\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n \"data-prefix\": \"fas\",\n \"data-icon\": \"save\",\n role: \"img\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 448 512\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n fill: \"currentColor\",\n d:\n \"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"39\",\n height: \"39\",\n viewBox: \"0 0 39 39\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M19.22 38.44C29.8349 38.44 38.44 29.8349 38.44 19.22C38.44 8.60509 29.8349 0 19.22 0C8.60509 0 0 8.60509 0 19.22C0 29.8349 8.60509 38.44 19.22 38.44Z\",\n fill: \"#3B5998\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M23.442 18.5216H20.833V28.08H16.88V18.5216H15V15.1624H16.88V12.9887C16.88 11.4342 17.6184 9 20.8682 9L23.7962 9.01225V12.2729H21.6717C21.3232 12.2729 20.8332 12.447 20.8332 13.1886V15.1656H23.7874L23.442 18.5216Z\",\n fill: \"white\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"40\",\n height: \"39\",\n viewBox: \"0 0 40 39\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"circle\", {\n attrs: {\n cx: \"20.0078\",\n cy: \"19.7782\",\n r: \"18.7188\",\n fill: \"#F2F2F2\",\n stroke: \"#F2F2F2\",\n \"stroke-width\": \"1.00639\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M13.744 21.9871L12.9733 24.8641L10.1565 24.9237C9.31465 23.3623 8.83716 21.5759 8.83716 19.6775C8.83716 17.8418 9.2836 16.1107 10.075 14.5864H10.0756L12.5833 15.0462L13.6819 17.5389C13.4519 18.2092 13.3266 18.9288 13.3266 19.6775C13.3267 20.4902 13.4739 21.2688 13.744 21.9871Z\",\n fill: \"#FBBB00\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M30.7842 17.6089C30.9114 18.2786 30.9777 18.9701 30.9777 19.677C30.9777 20.4695 30.8943 21.2426 30.7356 21.9883C30.1967 24.526 28.7886 26.7419 26.8379 28.3099L26.8373 28.3093L23.6786 28.1482L23.2316 25.3575C24.5259 24.5984 25.5375 23.4104 26.0703 21.9883H20.1508V17.6089H26.1567H30.7842Z\",\n fill: \"#518EF8\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M26.8374 28.3096L26.838 28.3102C24.9409 29.8351 22.531 30.7475 19.9076 30.7475C15.6918 30.7475 12.0264 28.3911 10.1566 24.9235L13.7441 21.9868C14.679 24.4819 17.0859 26.258 19.9076 26.258C21.1204 26.258 22.2567 25.9301 23.2317 25.3578L26.8374 28.3096Z\",\n fill: \"#28B446\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M26.9737 11.1555L23.3874 14.0916C22.3783 13.4608 21.1855 13.0964 19.9075 13.0964C17.022 13.0964 14.5701 14.954 13.682 17.5386L10.0757 14.5861H10.0751C11.9175 11.0339 15.6291 8.60693 19.9075 8.60693C22.5936 8.60693 25.0564 9.56373 26.9737 11.1555Z\",\n fill: \"#F14336\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n width: \"39\",\n height: \"39\",\n viewBox: \"0 0 39 39\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M19.4104 39.0002C30.0264 39.0002 38.6324 30.3942 38.6324 19.7782C38.6324 9.16215 30.0264 0.556152 19.4104 0.556152C8.79435 0.556152 0.188354 9.16215 0.188354 19.7782C0.188354 30.3942 8.79435 39.0002 19.4104 39.0002Z\",\n fill: \"#55ACEE\"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d:\n \"M31.1843 14.3704C30.3605 14.7357 29.4744 14.9827 28.5452 15.0931C29.494 14.5246 30.2221 13.6251 30.5658 12.5516C29.678 13.0783 28.6942 13.4603 27.6481 13.6663C26.81 12.7737 25.6159 12.2158 24.2936 12.2158C21.7566 12.2158 19.699 14.2734 19.699 16.8104C19.699 17.1706 19.7397 17.5211 19.8185 17.8576C16 17.666 12.6143 15.837 10.348 13.0563C9.95261 13.7348 9.72577 14.5246 9.72577 15.3665C9.72577 16.9602 10.5375 18.3671 11.7697 19.1908C11.0169 19.1672 10.3079 18.9606 9.68876 18.6155C9.68842 18.635 9.68842 18.6546 9.68842 18.6738C9.68842 20.9 11.2728 22.7568 13.3743 23.1786C12.9892 23.2841 12.5825 23.34 12.1641 23.34C11.8673 23.34 11.5799 23.3115 11.2996 23.2581C11.8841 25.083 13.5806 26.4115 15.5916 26.4489C14.0188 27.6814 12.038 28.4157 9.88476 28.4157C9.5147 28.4157 9.14806 28.3941 8.78931 28.3512C10.8216 29.6554 13.2373 30.4157 15.8318 30.4157C24.2829 30.4157 28.9046 23.4147 28.9046 17.3426C28.9046 17.1435 28.9002 16.9451 28.8913 16.7484C29.7897 16.1008 30.5685 15.2918 31.1843 14.3704Z\",\n fill: \"#F1F2F2\"\n }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { id: \"loginForm\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.validateBeforeSubmit($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"mb-4\" },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.email.$error,\n disabled: _vm.isSent,\n placeholder: _vm.$t(\"login.enter_email\"),\n focus: \"\",\n name: \"email\"\n },\n on: {\n blur: function($event) {\n return _vm.$v.formData.email.$touch()\n }\n },\n model: {\n value: _vm.formData.email,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"email\", $$v)\n },\n expression: \"formData.email\"\n }\n }),\n _vm._v(\" \"),\n _vm.$v.formData.email.$error\n ? _c(\"div\", [\n !_vm.$v.formData.email.required\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.required\")) +\n \"\\n \"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.$v.formData.email.email\n ? _c(\"span\", { staticClass: \"text-sm text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.email_incorrect\")) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n type: \"submit\",\n variant: \"primary\"\n }\n },\n [\n !_vm.isSent\n ? _c(\"div\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.send_reset_link\")) +\n \"\\n \"\n )\n ])\n : _c(\"div\", [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"validation.not_yet\")) + \"\\n \"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-4 mb-4 text-sm\" },\n [\n _c(\n \"router-link\",\n {\n staticClass: \"text-sm text-primary-400 hover:text-gray-700\",\n attrs: { to: \"/login\" }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.back_to_login\")) + \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { id: \"loginForm\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.validateBeforeSubmit($event)\n }\n }\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"login.email\"),\n error: _vm.emailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.loginData.email.$error,\n placeholder: _vm.$t(_vm.login.login_placeholder),\n focus: \"\",\n type: \"email\",\n name: \"email\"\n },\n on: {\n input: function($event) {\n return _vm.$v.loginData.email.$touch()\n }\n },\n model: {\n value: _vm.loginData.email,\n callback: function($$v) {\n _vm.$set(_vm.loginData, \"email\", $$v)\n },\n expression: \"loginData.email\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"login.password\"),\n error: _vm.passwordError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.loginData.password.$error,\n type: _vm.getInputType,\n name: \"password\"\n },\n on: {\n input: function($event) {\n return _vm.$v.loginData.password.$touch()\n }\n },\n scopedSlots: _vm._u([\n {\n key: \"rightIcon\",\n fn: function() {\n return [\n _vm.isShowPassword\n ? _c(\"eye-off-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n : _c(\"eye-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n ]\n },\n proxy: true\n }\n ]),\n model: {\n value: _vm.loginData.password,\n callback: function($$v) {\n _vm.$set(_vm.loginData, \"password\", $$v)\n },\n expression: \"loginData.password\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"mt-5 mb-8\" }, [\n _c(\n \"div\",\n { staticClass: \"mb-4\" },\n [\n _c(\n \"router-link\",\n {\n staticClass: \"text-sm text-primary-400 hover:text-gray-700\",\n attrs: { to: \"forgot-password\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"login.forgot_password\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n type: \"submit\",\n variant: \"primary\"\n }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"login.login\")) + \"\\n \")]\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n { attrs: { id: \"registerForm\", action: \"\", method: \"post\" } },\n [\n _c(\"div\", { staticClass: \"form-group\" }, [\n _c(\"input\", {\n staticClass: \"form-control form-control-danger\",\n attrs: {\n placeholder: _vm.$t(\"login.enter_email\"),\n type: \"email\",\n name: \"email\"\n }\n })\n ]),\n _vm._v(\" \"),\n _vm._m(0),\n _vm._v(\" \"),\n _vm._m(1),\n _vm._v(\" \"),\n _c(\"sw-button\", { staticClass: \"btn btn-login btn-full\" }, [\n _vm._v(_vm._s(_vm.$t(\"login.register\")))\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"form-group\" }, [\n _c(\"input\", {\n staticClass: \"form-control form-control-danger\",\n attrs: {\n id: \"password\",\n type: \"password\",\n placeholder: \"Enter Password\",\n name: \"password\"\n }\n })\n ])\n },\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"form-group\" }, [\n _c(\"input\", {\n staticClass: \"form-control form-control-danger\",\n attrs: {\n type: \"password\",\n placeholder: \"Retype Password\",\n name: \"password_confirmation\"\n }\n })\n ])\n }\n]\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { id: \"loginForm\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.validateBeforeSubmit($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"mb-4 form-group\" },\n [\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"login.email\"), required: \"\" } },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.email.$error,\n placeholder: _vm.$t(\"login.enter_email\"),\n type: \"email\",\n name: \"email\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.email.$touch()\n }\n },\n model: {\n value: _vm.formData.email,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"email\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.email\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.$v.formData.email.$error\n ? _c(\"div\", [\n !_vm.$v.formData.email.required\n ? _c(\n \"span\",\n { staticClass: \"text-sm help-block text-danger\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.required\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.$v.formData.email.email\n ? _c(\n \"span\",\n { staticClass: \"text-sm help-block text-danger\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.email_incorrect\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mb-4 form-group\" },\n [\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"login.password\"), required: \"\" } },\n [\n _c(\"sw-input\", {\n attrs: {\n id: \"password\",\n invalid: _vm.$v.formData.password.$error,\n placeholder: _vm.$t(\"login.enter_password\"),\n type: \"password\",\n name: \"password\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.password.$touch()\n }\n },\n model: {\n value: _vm.formData.password,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"password\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.password\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.$v.formData.password.$error\n ? _c(\"div\", [\n !_vm.$v.formData.password.required\n ? _c(\n \"span\",\n { staticClass: \"text-sm help-block text-danger\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.required\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.$v.formData.password.minLength\n ? _c(\n \"span\",\n { staticClass: \"text-sm help-block text-danger\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$tc(\n \"validation.password_length\",\n _vm.$v.formData.password.minLength.min,\n {\n count:\n _vm.$v.formData.password.$params.minLength\n .min\n }\n )\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mb-8 form-group\" },\n [\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"login.retype_password\"), required: \"\" } },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.password_confirmation.$error,\n placeholder: _vm.$t(\"login.retype_password\"),\n type: \"password\",\n name: \"password_confirmation\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.password_confirmation.$touch()\n }\n },\n model: {\n value: _vm.formData.password_confirmation,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"password_confirmation\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.password_confirmation\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.$v.formData.password_confirmation.$error\n ? _c(\"div\", [\n !_vm.$v.formData.password_confirmation.sameAsPassword\n ? _c(\n \"span\",\n { staticClass: \"text-sm help-block text-danger\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.password_incorrect\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sw-button\", { attrs: { type: \"submit\", variant: \"primary\" } }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"login.reset_password\")) + \"\\n \")\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n { staticClass: \"customer-create\" },\n [\n !_vm.initLoad\n ? _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitCustomerData($event)\n }\n }\n },\n [\n _c(\n \"sw-page-header\",\n { staticClass: \"mb-5\", attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"/admin/dashboard\",\n title: _vm.$t(\"general.home\")\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"/admin/customers\",\n title: _vm.$tc(\"customers.customer\", 2)\n }\n }),\n _vm._v(\" \"),\n _vm.$route.name === \"customers.edit\"\n ? _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"#\",\n title: _vm.$t(\"customers.edit_customer\"),\n active: \"\"\n }\n })\n : _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"#\",\n title: _vm.$t(\"customers.new_customer\"),\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"hidden md:relative md:flex\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\",\n size: \"lg\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n\\n \" +\n _vm._s(\n _vm.isEdit\n ? _vm.$t(\"customers.update_customer\")\n : _vm.$t(\"customers.save_customer\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"sw-card\",\n { attrs: { variant: \"customer-card\" } },\n [\n _c(\"div\", { staticClass: \"grid grid-cols-5 gap-4 mb-8\" }, [\n _c(\n \"h6\",\n {\n staticClass: \"col-span-5 sw-section-title lg:col-span-1\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.basic_info\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid col-span-5 lg:col-span-4 gap-y-6 gap-x-4 md:grid-cols-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: {\n label: _vm.$t(\"customers.display_name\"),\n error: _vm.displayNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.name.$error,\n focus: \"\",\n type: \"text\",\n name: \"name\",\n tabindex: \"1\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: {\n label: _vm.$t(\"customers.primary_contact_name\")\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n label: _vm.$t(\"customers.contact_name\"),\n type: \"text\",\n tabindex: \"2\"\n },\n model: {\n value: _vm.formData.contact_name,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"contact_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.contact_name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: {\n label: _vm.$t(\"customers.email\"),\n error: _vm.emailError\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.email.$error,\n type: \"text\",\n name: \"email\",\n tabindex: \"3\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.email.$touch()\n }\n },\n model: {\n value: _vm.formData.email,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"email\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.email\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.phone\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n type: \"text\",\n name: \"phone\",\n tabindex: \"4\"\n },\n model: {\n value: _vm.formData.phone,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"phone\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: {\n label: _vm.$t(\"customers.primary_currency\")\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.currencies,\n \"custom-label\": _vm.currencyNameWithCode,\n \"allow-empty\": false,\n searchable: true,\n \"show-labels\": false,\n tabindex: 5,\n placeholder: _vm.$t(\n \"customers.select_currency\"\n ),\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.currency,\n callback: function($$v) {\n _vm.currency = $$v\n },\n expression: \"currency\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: {\n label: _vm.$t(\"customers.website\"),\n error: _vm.urlError\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.website.$error,\n type: \"url\",\n tabindex: \"6\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.website.$touch()\n }\n },\n model: {\n value: _vm.formData.website,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"website\", $$v)\n },\n expression: \"formData.website\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"sw-divider\", { staticClass: \"mb-5 md:mb-8\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"grid grid-cols-5 gap-4 mb-8\" }, [\n _c(\n \"h6\",\n {\n staticClass: \"col-span-5 sw-section-title lg:col-span-1\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.billing_address\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid col-span-5 lg:col-span-4 gap-y-6 gap-x-4 md:grid-cols-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.name\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n type: \"text\",\n name: \"address_name\",\n tabindex: \"7\"\n },\n model: {\n value: _vm.billing.name,\n callback: function($$v) {\n _vm.$set(\n _vm.billing,\n \"name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"billing.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.country\") }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.countries,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": true,\n tabindex: 8,\n placeholder: _vm.$t(\"general.select_country\"),\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.billing_country,\n callback: function($$v) {\n _vm.billing_country = $$v\n },\n expression: \"billing_country\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.state\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n name: \"billing.state\",\n type: \"text\",\n tabindex: \"9\"\n },\n model: {\n value: _vm.billing.state,\n callback: function($$v) {\n _vm.$set(_vm.billing, \"state\", $$v)\n },\n expression: \"billing.state\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.city\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n name: \"billing.city\",\n type: \"text\",\n tabindex: \"10\"\n },\n model: {\n value: _vm.billing.city,\n callback: function($$v) {\n _vm.$set(_vm.billing, \"city\", $$v)\n },\n expression: \"billing.city\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"md:col-span-3\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"customers.address\"),\n error: _vm.billAddress1Error\n }\n },\n [\n _c(\"sw-textarea\", {\n attrs: {\n placeholder: _vm.$t(\"general.street_1\"),\n type: \"text\",\n name: \"billing_street1\",\n rows: \"3\",\n tabindex: \"11\"\n },\n on: {\n input: function($event) {\n return _vm.$v.billing.address_street_1.$touch()\n }\n },\n model: {\n value: _vm.billing.address_street_1,\n callback: function($$v) {\n _vm.$set(\n _vm.billing,\n \"address_street_1\",\n typeof $$v === \"string\"\n ? $$v.trim()\n : $$v\n )\n },\n expression: \"billing.address_street_1\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { error: _vm.billAddress2Error } },\n [\n _c(\"sw-textarea\", {\n attrs: {\n placeholder: _vm.$t(\"general.street_2\"),\n type: \"text\",\n name: \"billing_street2\",\n rows: \"3\",\n tabindex: \"12\"\n },\n on: {\n input: function($event) {\n return _vm.$v.billing.address_street_2.$touch()\n }\n },\n model: {\n value: _vm.billing.address_street_2,\n callback: function($$v) {\n _vm.$set(\n _vm.billing,\n \"address_street_2\",\n typeof $$v === \"string\"\n ? $$v.trim()\n : $$v\n )\n },\n expression: \"billing.address_street_2\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"md:col-span-3\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-6\",\n attrs: { label: _vm.$t(\"customers.phone\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n type: \"text\",\n name: \"phone\",\n tabindex: \"13\"\n },\n model: {\n value: _vm.billing.phone,\n callback: function($$v) {\n _vm.$set(\n _vm.billing,\n \"phone\",\n typeof $$v === \"string\"\n ? $$v.trim()\n : $$v\n )\n },\n expression: \"billing.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: { label: _vm.$t(\"customers.zip_code\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n tabindex: \"14\",\n type: \"text\",\n name: \"zip\"\n },\n model: {\n value: _vm.billing.zip,\n callback: function($$v) {\n _vm.$set(\n _vm.billing,\n \"zip\",\n typeof $$v === \"string\"\n ? $$v.trim()\n : $$v\n )\n },\n expression: \"billing.zip\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"sw-divider\", { staticClass: \"mb-5 md:mb-8\" }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-start mb-6 md:justify-end md:mb-0\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"p-1\" },\n [\n _c(\n \"sw-button\",\n {\n ref: \"sameAddress\",\n staticClass: \"h-8 px-3 py-1 mb-4\",\n attrs: { variant: \"primary\", type: \"button\" },\n on: {\n click: function($event) {\n return _vm.copyAddress(true)\n }\n }\n },\n [\n _c(\"document-duplicate-icon\", {\n staticClass: \"h-4 mr-1 -ml-2\"\n }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"text-xs\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"customers.copy_billing_address\")\n ) +\n \"\\n \"\n )\n ])\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"grid grid-cols-5 gap-4 mb-8\" }, [\n _c(\n \"h6\",\n {\n staticClass: \"col-span-5 sw-section-title lg:col-span-1\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.shipping_address\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid col-span-5 lg:col-span-4 gap-y-6 gap-x-4 md:grid-cols-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.name\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n type: \"text\",\n name: \"address_name\",\n tabindex: \"15\"\n },\n model: {\n value: _vm.shipping.name,\n callback: function($$v) {\n _vm.$set(\n _vm.shipping,\n \"name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"shipping.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.country\") }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.countries,\n searchable: true,\n \"show-labels\": false,\n tabindex: 16,\n \"allow-empty\": true,\n placeholder: _vm.$t(\"general.select_country\"),\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.shipping_country,\n callback: function($$v) {\n _vm.shipping_country = $$v\n },\n expression: \"shipping_country\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.state\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n name: \"shipping.state\",\n type: \"text\",\n tabindex: \"17\"\n },\n model: {\n value: _vm.shipping.state,\n callback: function($$v) {\n _vm.$set(_vm.shipping, \"state\", $$v)\n },\n expression: \"shipping.state\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.city\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n name: \"shipping.city\",\n type: \"text\",\n tabindex: \"18\"\n },\n model: {\n value: _vm.shipping.city,\n callback: function($$v) {\n _vm.$set(_vm.shipping, \"city\", $$v)\n },\n expression: \"shipping.city\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"md:col-span-3\",\n attrs: { label: _vm.$t(\"customers.address\") }\n },\n [\n _c(\"sw-textarea\", {\n attrs: {\n tabindex: 19,\n placeholder: _vm.$t(\"general.street_1\"),\n type: \"text\",\n name: \"street_1\",\n rows: \"3\"\n },\n on: {\n input: function($event) {\n return _vm.$v.shipping.address_street_1.$touch()\n }\n },\n model: {\n value: _vm.shipping.address_street_1,\n callback: function($$v) {\n _vm.$set(\n _vm.shipping,\n \"address_street_1\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"shipping.address_street_1\"\n }\n }),\n _vm._v(\" \"),\n _vm.$v.shipping.address_street_1.$error\n ? _c(\"div\", [\n !_vm.$v.shipping.address_street_1.maxLength\n ? _c(\n \"span\",\n { staticClass: \"text-sm text-danger\" },\n [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"validation.address_maxlength\"\n )\n )\n )\n ]\n )\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"sw-textarea\", {\n attrs: {\n tabindex: 20,\n placeholder: _vm.$t(\"general.street_2\"),\n type: \"text\",\n name: \"street_2\",\n rows: \"3\"\n },\n on: {\n input: function($event) {\n return _vm.$v.shipping.address_street_2.$touch()\n }\n },\n model: {\n value: _vm.shipping.address_street_2,\n callback: function($$v) {\n _vm.$set(\n _vm.shipping,\n \"address_street_2\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"shipping.address_street_2\"\n }\n }),\n _vm._v(\" \"),\n _vm.$v.shipping.address_street_2.$error\n ? _c(\"div\", [\n !_vm.$v.shipping.address_street_2.maxLength\n ? _c(\n \"span\",\n { staticClass: \"text-danger\" },\n [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"validation.address_maxlength\"\n )\n )\n )\n ]\n )\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"md:col-span-3\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-6\",\n attrs: { label: _vm.$t(\"customers.phone\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n type: \"text\",\n name: \"phone\",\n tabindex: \"21\"\n },\n model: {\n value: _vm.shipping.phone,\n callback: function($$v) {\n _vm.$set(\n _vm.shipping,\n \"phone\",\n typeof $$v === \"string\"\n ? $$v.trim()\n : $$v\n )\n },\n expression: \"shipping.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: { label: _vm.$t(\"customers.zip_code\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n type: \"text\",\n name: \"zip\",\n tabindex: \"22\"\n },\n model: {\n value: _vm.shipping.zip,\n callback: function($$v) {\n _vm.$set(\n _vm.shipping,\n \"zip\",\n typeof $$v === \"string\"\n ? $$v.trim()\n : $$v\n )\n },\n expression: \"shipping.zip\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _vm.customFields.length > 0\n ? _c(\"sw-divider\", { staticClass: \"mb-5 md:mb-8\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.customFields.length > 0\n ? _c(\n \"div\",\n { staticClass: \"grid grid-cols-5 gap-4 mb-8\" },\n [\n _c(\n \"h6\",\n {\n staticClass:\n \"col-span-5 sw-section-title lg:col-span-1\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.custom_fields.title\")\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid col-span-5 lg:col-span-4 gap-y-6 gap-x-4 md:grid-cols-6\"\n },\n _vm._l(_vm.customFields, function(field, index) {\n return _c(\n \"sw-input-group\",\n {\n key: index,\n staticClass: \"md:col-span-3\",\n attrs: {\n label: field.label,\n required: field.is_required ? true : false\n }\n },\n [\n _c(field.type + \"Field\", {\n tag: \"component\",\n attrs: {\n type: field.type.label,\n field: field,\n isEdit: _vm.isEdit,\n \"invalid-fields\": _vm.invalidFields,\n tabindex: 23 + index\n },\n on: { update: _vm.setCustomFieldValue }\n })\n ],\n 1\n )\n }),\n 1\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"flex w-full sm:hidden md:hidden\",\n attrs: {\n disabled: _vm.isLoading,\n loading: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\",\n size: \"lg\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isEdit\n ? _vm.$t(\"customers.update_customer\")\n : _vm.$t(\"customers.save_customer\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n : _c(\"base-loader\")\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n { staticClass: \"customer-create\" },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.$t(\"customers.title\") } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: { title: _vm.$t(\"general.home\"), to: \"dashboard\" }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$tc(\"customers.customer\", 2),\n to: \"#\",\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.totalCustomers,\n expression: \"totalCustomers\"\n }\n ],\n attrs: { size: \"lg\", variant: \"primary-outline\" },\n on: { click: _vm.toggleFilter }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.filter\")) +\n \"\\n \"\n ),\n _c(_vm.filterIcon, {\n tag: \"component\",\n staticClass: \"h-4 ml-1 -mr-1 font-bold\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"ml-4\",\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"customers/create\",\n size: \"lg\",\n variant: \"primary\"\n }\n },\n [\n _c(\"plus-sm-icon\", {\n staticClass: \"h-6 mr-1 -ml-2 font-bold\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.new_customer\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"slide-y-up-transition\",\n [\n _c(\n \"sw-filter-wrapper\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showFilters,\n expression: \"showFilters\"\n }\n ]\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2\",\n attrs: { label: _vm.$t(\"customers.display_name\") }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: { type: \"text\", name: \"name\", autocomplete: \"off\" },\n model: {\n value: _vm.filters.display_name,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"display_name\", $$v)\n },\n expression: \"filters.display_name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 ml-0 lg:ml-6\",\n attrs: { label: _vm.$t(\"customers.contact_name\") }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n type: \"text\",\n name: \"address_name\",\n autocomplete: \"off\"\n },\n model: {\n value: _vm.filters.contact_name,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"contact_name\", $$v)\n },\n expression: \"filters.contact_name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 ml-0 lg:ml-6\",\n attrs: { label: _vm.$t(\"customers.phone\") }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: { type: \"text\", name: \"phone\", autocomplete: \"off\" },\n model: {\n value: _vm.filters.phone,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"phone\", $$v)\n },\n expression: \"filters.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"absolute text-sm leading-snug text-black cursor-pointer\",\n staticStyle: { top: \"10px\", right: \"15px\" },\n on: { click: _vm.clearFilter }\n },\n [_vm._v(_vm._s(_vm.$t(\"general.clear_all\")))]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-empty-table-placeholder\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showEmptyScreen,\n expression: \"showEmptyScreen\"\n }\n ],\n attrs: {\n title: _vm.$t(\"customers.no_customers\"),\n description: _vm.$t(\"customers.list_of_customers\")\n }\n },\n [\n _c(\"astronaut-icon\", { staticClass: \"mt-5 mb-4\" }),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"actions\",\n \"tag-name\": \"router-link\",\n to: \"/admin/customers/create\",\n size: \"lg\",\n variant: \"primary-outline\"\n },\n slot: \"actions\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.add_new_customer\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showEmptyScreen,\n expression: \"!showEmptyScreen\"\n }\n ],\n staticClass: \"relative table-container\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center justify-between h-10 mt-5 border-b-2 border-gray-200 border-solid\"\n },\n [\n _c(\"p\", { staticClass: \"text-sm\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.showing\")) + \": \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.customers.length))]),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.of\")) + \" \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.totalCustomers))])\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-transition\",\n { attrs: { type: \"fade\" } },\n [\n _vm.selectedCustomers.length\n ? _c(\n \"sw-dropdown\",\n [\n _c(\n \"span\",\n {\n staticClass:\n \"flex block text-sm font-medium cursor-pointer select-none text-primary-400\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.actions\")) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", { staticClass: \"h-5\" })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.removeMultipleCustomers } },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"absolute z-10 items-center pl-4 mt-2 select-none md:mt-12\"\n },\n [\n _c(\"sw-checkbox\", {\n staticClass: \"hidden md:inline\",\n attrs: { variant: \"primary\", size: \"sm\" },\n on: { change: _vm.selectAllCustomers },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-checkbox\", {\n staticClass: \"md:hidden\",\n attrs: {\n label: _vm.$t(\"general.select_all\"),\n variant: \"primary\",\n size: \"sm\"\n },\n on: { change: _vm.selectAllCustomers },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: {\n \"show-filter\": false,\n data: _vm.fetchData,\n \"table-class\": \"table\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return _c(\n \"div\",\n { staticClass: \"relative block\" },\n [\n _c(\"sw-checkbox\", {\n attrs: {\n id: row.id,\n value: row.id,\n variant: \"primary\",\n size: \"sm\"\n },\n model: {\n value: _vm.selectField,\n callback: function($$v) {\n _vm.selectField = $$v\n },\n expression: \"selectField\"\n }\n })\n ],\n 1\n )\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n filterable: true,\n label: _vm.$t(\"customers.display_name\"),\n show: \"name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"customers.display_name\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass: \"font-medium text-primary-500\",\n attrs: {\n to: { path: \"customers/\" + row.id + \"/view\" }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.name) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"customers.contact_name\"),\n show: \"contact_name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"customers.contact_name\")))\n ]),\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(\n row.contact_name\n ? row.contact_name\n : \"No Contact Name\"\n ) +\n \"\\n \"\n )\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"customers.phone\"),\n show: \"phone\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"customers.phone\")))]),\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(row.phone ? row.phone : \"No Contact\") +\n \"\\n \"\n )\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"customers.amount_due\"),\n show: \"due_amount\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n \" \" + _vm._s(_vm.$t(\"customers.amount_due\")) + \" \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n row.due_amount,\n row.currency\n )\n )\n }\n })\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"customers.added_on\"),\n \"sort-as\": \"created_at\",\n show: \"formattedCreatedAt\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"customers.action\")) + \" \")\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n to: \"customers/\" + row.id + \"/edit\",\n \"tag-name\": \"router-link\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n to: \"customers/\" + row.id + \"/view\",\n \"tag-name\": \"router-link\"\n }\n },\n [\n _c(\"eye-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.view\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeCustomer(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n { staticClass: \"xl:pl-96\" },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"/admin/customers/\" + _vm.$route.params.id + \"/edit\",\n variant: \"primary-outline\"\n }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.edit\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n { attrs: { position: \"bottom-end\" } },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: { slot: \"activator\", variant: \"primary\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.new_transaction\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to:\n \"/admin/estimates/create?customer=\" +\n _vm.$route.params.id\n }\n },\n [\n _c(\"document-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.new_estimate\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to:\n \"/admin/invoices/create?customer=\" +\n _vm.$route.params.id\n }\n },\n [\n _c(\"document-text-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.new_invoice\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to:\n \"/admin/payments/create?customer=\" +\n _vm.$route.params.id\n }\n },\n [\n _c(\"credit-card-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"payments.new_payment\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to:\n \"/admin/expenses/create?customer=\" +\n _vm.$route.params.id\n }\n },\n [\n _c(\"calculator-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"expenses.new_expense\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\n \"sw-button\",\n {\n attrs: { slot: \"activator\", variant: \"primary\" },\n slot: \"activator\"\n },\n [\n _c(\"dots-horizontal-icon\", {\n staticClass: \"h-5 -ml-1 -mr-1\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeCustomer(_vm.$route.params.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\"customer-view-sidebar\"),\n _vm._v(\" \"),\n _c(\"customer-chart\")\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.chartData\n ? _c(\n \"sw-card\",\n { staticClass: \"flex flex-col mt-6\" },\n [\n _c(\"div\", { staticClass: \"grid grid-cols-12\" }, [\n _c(\n \"div\",\n { staticClass: \"col-span-12 xl:col-span-9 xxl:col-span-10\" },\n [\n _c(\"div\", { staticClass: \"flex justify-between mt-1 mb-6\" }, [\n _c(\n \"h6\",\n { staticClass: \"flex items-center sw-section-title\" },\n [\n _c(\"chart-square-bar-icon\", {\n staticClass: \"h-5 text-primary-400\"\n }),\n _vm._v(\n _vm._s(_vm.$t(\"dashboard.monthly_chart.title\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"w-40 h-10\" },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.years,\n \"allow-empty\": false,\n \"show-labels\": false,\n placeholder: _vm.$t(\"dashboard.select_year\")\n },\n on: { select: _vm.onChangeYear },\n model: {\n value: _vm.selectedYear,\n callback: function($$v) {\n _vm.selectedYear = $$v\n },\n expression: \"selectedYear\"\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"line-chart\", {\n staticClass: \"sm:w-full\",\n attrs: {\n \"format-money\": _vm.$utils.formatMoney,\n \"format-graph-money\": _vm.$utils.formatGraphMoney,\n invoices: _vm.getChartInvoices,\n expenses: _vm.getChartExpenses,\n receipts: _vm.getReceiptTotals,\n income: _vm.getNetProfits,\n labels: _vm.getChartMonths\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid col-span-12 mt-6 text-center xl:mt-0 sm:grid-cols-4 xl:text-right xl:col-span-3 xl:grid-cols-1 xxl:col-span-2\"\n },\n [\n _c(\"div\", { staticClass: \"px-6 py-2\" }, [\n _c(\"span\", { staticClass: \"text-xs leading-5 lg:text-sm\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.chart_info.total_sales\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"block mt-1 text-xl font-semibold leading-8\"\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(_vm.getFormattedSalesTotal)\n }\n })\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"px-6 py-2\" }, [\n _c(\"span\", { staticClass: \"text-xs leading-5 lg:text-sm\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.chart_info.total_receipts\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"block mt-1 text-xl font-semibold leading-8\",\n staticStyle: { color: \"#00c99c\" }\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(_vm.getFormattedTotalReceipts)\n }\n })\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"px-6 py-2\" }, [\n _c(\"span\", { staticClass: \"text-xs leading-5 lg:text-sm\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.chart_info.total_expense\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"block mt-1 text-xl font-semibold leading-8\",\n staticStyle: { color: \"#fb7178\" }\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(_vm.getFormattedTotalExpenses)\n }\n })\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"px-6 py-2\" }, [\n _c(\"span\", { staticClass: \"text-xs leading-5 lg:text-sm\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.chart_info.net_income\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"block mt-1 text-xl font-semibold leading-8\",\n staticStyle: { color: \"#5851d8\" }\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(_vm.getFormattedTotalNetProfit)\n }\n })\n ]\n )\n ])\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"customer-info\")\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"pt-6 mt-5 border-t-2 border-solid lg:pt-8 md:pt-4\",\n staticStyle: { \"border-top-color\": \"#f9fbff\" }\n },\n [\n _c(\"div\", { staticClass: \"col-span-12\" }, [\n _c(\"p\", { staticClass: \"text-gray-500 uppercase sw-section-title\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"customers.basic_info\")) + \"\\n \")\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mt-5 lg:grid-cols-3 md:grid-cols-2 sm:grid-cols-1\"\n },\n [\n _c(\"div\", [\n _c(\n \"p\",\n {\n staticClass:\n \"mb-1 text-sm font-normal leading-5 non-italic text-primary-800\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.display_name\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedViewCustomer.customer &&\n _vm.selectedViewCustomer.customer.name\n ? _vm.selectedViewCustomer.customer.name\n : \"\"\n ) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\n \"p\",\n {\n staticClass:\n \"mb-1 text-sm font-normal leading-5 non-italic text-primary-800\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.primary_contact_name\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedViewCustomer.customer &&\n _vm.selectedViewCustomer.customer.contact_name\n ? _vm.selectedViewCustomer.customer.contact_name\n : \"\"\n ) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\n \"p\",\n {\n staticClass:\n \"mb-1 text-sm font-normal leading-5 non-italic text-primary-800\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.email\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedViewCustomer.customer &&\n _vm.selectedViewCustomer.customer.email\n ? _vm.selectedViewCustomer.customer.email\n : \"\"\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mt-5 lg:grid-cols-3 md:grid-cols-2 sm:grid-cols-1\"\n },\n [\n _c(\"div\", [\n _c(\n \"p\",\n {\n staticClass:\n \"mb-1 text-sm font-normal leading-5 non-italic text-primary-800\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"wizard.currency\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedViewCustomer.customer.currency\n ? _vm.selectedViewCustomer.customer.currency.code +\n \" (\" +\n _vm.selectedViewCustomer.customer.currency\n .symbol +\n \")\"\n : \"\"\n ) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\n \"p\",\n {\n staticClass:\n \"mb-1 text-sm font-normal leading-5 non-italic text-primary-800\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.phone_number\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedViewCustomer.customer &&\n _vm.selectedViewCustomer.customer.phone\n ? _vm.selectedViewCustomer.customer.phone\n : \"\"\n ) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\n \"p\",\n {\n staticClass:\n \"mb-1 text-sm font-normal leading-5 non-italic text-primary-800\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.website\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedViewCustomer.customer &&\n _vm.selectedViewCustomer.customer.website\n ? _vm.selectedViewCustomer.customer.website\n : \"\"\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _vm.getFormattedShippingAddress.length ||\n _vm.getFormattedBillingAddress.length\n ? _c(\n \"p\",\n { staticClass: \"mt-8 text-gray-500 uppercase sw-section-title\" },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"customers.address\")) + \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 md:grid-cols-2 sm:grid-cols-1 lg:grid-cols-2\"\n },\n [\n _vm.getFormattedBillingAddress.length\n ? _c(\"div\", { staticClass: \"mt-5\" }, [\n _c(\n \"p\",\n {\n staticClass:\n \"mb-1 text-sm font-normal leading-5 non-italic text-primary-800\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.billing_address\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"p\", {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\",\n domProps: {\n innerHTML: _vm._s(_vm.getFormattedBillingAddress)\n }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.getFormattedShippingAddress.length\n ? _c(\"div\", { staticClass: \"mt-5\" }, [\n _c(\n \"p\",\n {\n staticClass:\n \"mb-1 text-sm font-normal leading-5 non-italic text-primary-800\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.shipping_address\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"p\", {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\",\n domProps: {\n innerHTML: _vm._s(_vm.getFormattedShippingAddress)\n }\n })\n ])\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _vm.getCustomField.length > 0\n ? _c(\n \"p\",\n { staticClass: \"mt-8 text-gray-500 uppercase sw-section-title\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.custom_fields.title\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mt-5 lg:grid-cols-3 md:grid-cols-2 sm:grid-cols-1\"\n },\n _vm._l(_vm.getCustomField, function(field, index) {\n return _c(\n \"div\",\n {\n key: index,\n attrs: { required: field.is_required ? true : false }\n },\n [\n _c(\n \"p\",\n {\n staticClass:\n \"mb-1 text-sm font-normal leading-5 non-italic text-primary-800\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(field.custom_field.label) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n field.type === \"Switch\"\n ? _c(\n \"p\",\n {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\"\n },\n [\n field.defaultAnswer === 1\n ? _c(\"span\", [_vm._v(\" Yes \")])\n : _c(\"span\", [_vm._v(\" No \")])\n ]\n )\n : _c(\n \"p\",\n {\n staticClass:\n \"text-sm font-bold leading-5 text-black non-italic\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(field.defaultAnswer) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass:\n \"fixed top-0 left-0 hidden h-full pt-16 pb-4 ml-56 bg-white xl:ml-64 w-88 xl:block\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between px-4 pt-8 pb-2 border border-gray-200 border-solid height-full\"\n },\n [\n _c(\n \"sw-input\",\n {\n staticClass: \"mb-6\",\n attrs: {\n placeholder: _vm.$t(\"general.search\"),\n type: \"text\",\n variant: \"gray\"\n },\n on: {\n input: function($event) {\n return _vm.onSearch()\n }\n },\n model: {\n value: _vm.searchData.searchText,\n callback: function($$v) {\n _vm.$set(_vm.searchData, \"searchText\", $$v)\n },\n expression: \"searchData.searchText\"\n }\n },\n [\n _c(\"search-icon\", {\n staticClass: \"h-5\",\n attrs: { slot: \"rightIcon\" },\n slot: \"rightIcon\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"flex mb-6 ml-3\",\n attrs: { role: \"group\", \"aria-label\": \"First group\" }\n },\n [\n _c(\n \"sw-dropdown\",\n {\n attrs: {\n \"close-on-select\": false,\n align: \"left\",\n position: \"bottom-start\"\n }\n },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"activator\",\n size: \"md\",\n variant: \"gray-light\"\n },\n slot: \"activator\"\n },\n [_c(\"filter-icon\", { staticClass: \"h-5\" })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"px-2 py-1 pb-2 mb-2 text-sm border-b border-gray-200 border-solid\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.sort_by\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-3 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_create_date\",\n label: _vm.$t(\"customers.create_date\"),\n size: \"sm\",\n name: \"filter\",\n value: \"invoices.created_at\"\n },\n on: { change: _vm.onSearch },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(_vm.searchData, \"orderByField\", $$v)\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-3 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_display_name\",\n label: _vm.$t(\"customers.display_name\"),\n size: \"sm\",\n name: \"filter\",\n value: \"users.name\"\n },\n on: { change: _vm.onSearch },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(_vm.searchData, \"orderByField\", $$v)\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.top-center\",\n value: { content: _vm.getOrderName },\n expression: \"{ content: getOrderName }\",\n modifiers: { \"top-center\": true }\n }\n ],\n staticClass: \"ml-1\",\n attrs: { size: \"md\", variant: \"gray-light\" },\n on: { click: _vm.sortData }\n },\n [\n _vm.getOrderBy\n ? _c(\"sort-ascending-icon\", { staticClass: \"h-5\" })\n : _c(\"sort-descending-icon\", { staticClass: \"h-5\" })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isSearching\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _c(\n \"div\",\n {\n staticClass:\n \"h-full pb-32 overflow-y-scroll border-l border-gray-200 border-solid sidebar sw-scroll\"\n },\n [\n _vm._l(_vm.customers, function(customer, index) {\n return _c(\n \"router-link\",\n {\n key: index,\n class: [\n \"flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent\",\n {\n \"bg-gray-100 border-l-4 border-primary-500 border-solid\": _vm.hasActiveUrl(\n customer.id\n )\n }\n ],\n staticStyle: {\n \"border-top\": \"1px solid rgba(185, 193, 209, 0.41)\"\n },\n attrs: {\n to: \"/admin/customers/\" + customer.id + \"/view\",\n id: \"customer-\" + customer.id\n }\n },\n [\n _c(\"div\", [\n _c(\n \"div\",\n {\n staticClass:\n \"pr-2 text-sm not-italic font-normal leading-5 text-black capitalize truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(customer.name) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n customer.contact_name\n ? _c(\n \"div\",\n {\n staticClass:\n \"mt-1 text-xs not-italic font-medium leading-5 text-gray-600\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(customer.contact_name) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex-1 whitespace-nowrap right\" },\n [\n _c(\"div\", {\n staticClass:\n \"text-xl not-italic font-semibold leading-8 text-right text-gray-900\",\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n customer.due_amount,\n customer.currency\n )\n )\n }\n })\n ]\n )\n ]\n )\n }),\n _vm._v(\" \"),\n !_vm.customers.length\n ? _c(\n \"p\",\n {\n staticClass:\n \"flex justify-center px-4 mt-5 text-sm text-gray-600\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.no_matching_customers\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n [\n _c(\"dashboard-stats\"),\n _vm._v(\" \"),\n _c(\"dashboard-chart\"),\n _vm._v(\" \"),\n _c(\"dashboard-table\")\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"grid grid-cols-10 mt-8 bg-white rounded shadow\" },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 col-span-10 px-4 py-5 lg:col-span-7 xl:col-span-8 sm:p-6\"\n },\n [\n _c(\"div\", { staticClass: \"flex justify-between mt-1 mb-6\" }, [\n _c(\n \"h6\",\n { staticClass: \"flex items-center sw-section-title\" },\n [\n _c(\"chart-square-bar-icon\", {\n staticClass: \"h-5 text-primary-400\"\n }),\n _vm._v(\n _vm._s(_vm.$t(\"dashboard.monthly_chart.title\")) + \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"w-40 h-10\", staticStyle: { \"z-index\": \"0\" } },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.years,\n \"allow-empty\": false,\n \"show-labels\": false,\n placeholder: _vm.$t(\"dashboard.select_year\")\n },\n model: {\n value: _vm.selectedYear,\n callback: function($$v) {\n _vm.selectedYear = $$v\n },\n expression: \"selectedYear\"\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _vm.isLoaded\n ? _c(\"line-chart\", {\n staticClass: \"sm:w-full\",\n attrs: {\n \"format-money\": _vm.$utils.formatMoney,\n \"format-graph-money\": _vm.$utils.formatGraphMoney,\n invoices: _vm.getChartInvoices,\n expenses: _vm.getChartExpenses,\n receipts: _vm.getReceiptTotals,\n income: _vm.getNetProfits,\n labels: _vm.getChartMonths\n }\n })\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 grid-cols-3 col-span-10 text-center border-t border-l border-gray-200 border-solid lg:border-t-0 lg:text-right lg:col-span-3 xl:col-span-2 lg:grid-cols-1\"\n },\n [\n _c(\"div\", { staticClass: \"p-6\" }, [\n _c(\"span\", { staticClass: \"text-xs leading-5 lg:text-sm\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.chart_info.total_sales\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _vm.isLoaded\n ? _c(\n \"span\",\n {\n staticClass:\n \"block mt-1 text-xl font-semibold leading-8 lg:text-2xl\"\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n _vm.getTotalSales,\n _vm.defaultCurrency\n )\n )\n }\n })\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"p-6\" }, [\n _c(\"span\", { staticClass: \"text-xs leading-5 lg:text-sm\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.chart_info.total_receipts\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _vm.isLoaded\n ? _c(\n \"span\",\n {\n staticClass:\n \"block mt-1 text-xl font-semibold leading-8 lg:text-2xl\",\n staticStyle: { color: \"#00c99c\" }\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n _vm.getTotalReceipts,\n _vm.defaultCurrency\n )\n )\n }\n })\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"p-6\" }, [\n _c(\"span\", { staticClass: \"text-xs leading-5 lg:text-sm\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.chart_info.total_expense\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _vm.isLoaded\n ? _c(\n \"span\",\n {\n staticClass:\n \"block mt-1 text-xl font-semibold leading-8 lg:text-2xl\",\n staticStyle: { color: \"#fb7178\" }\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n _vm.getTotalExpenses,\n _vm.defaultCurrency\n )\n )\n }\n })\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"col-span-3 p-6 border-t border-gray-200 border-solid lg:col-span-1\"\n },\n [\n _c(\"span\", { staticClass: \"text-xs leading-5 lg:text-sm\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.chart_info.net_income\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass:\n \"block mt-1 text-xl font-semibold leading-8 lg:text-2xl\",\n staticStyle: { color: \"#5851d8\" }\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n _vm.getNetProfit,\n _vm.defaultCurrency\n )\n )\n }\n })\n ]\n )\n ]\n )\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"grid gap-6 sm:grid-cols-2 lg:grid-cols-9 xl:gap-8\" },\n [\n _c(\n \"router-link\",\n {\n staticClass:\n \"relative flex justify-between p-3 bg-white rounded shadow hover:bg-gray-100 lg:col-span-3 xl:p-4\",\n attrs: { slot: \"item-title\", to: \"/admin/invoices\" },\n slot: \"item-title\"\n },\n [\n _c(\"div\", [\n _vm.getDashboardDataLoaded\n ? _c(\n \"span\",\n {\n staticClass:\n \"text-xl font-semibold leading-tight text-black xl:text-3xl\"\n },\n [\n _c(\"span\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n _vm.getTotalDueAmount,\n _vm.defaultCurrency\n )\n )\n }\n })\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass:\n \"block mt-1 text-sm leading-tight text-gray-500 xl:text-lg\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.cards.due_amount\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex items-center\" },\n [_c(\"dollar-icon\", { staticClass: \"w-10 h-10 xl:w-12 xl:h-12\" })],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass:\n \"relative flex justify-between p-3 bg-white rounded shadow hover:bg-gray-100 lg:col-span-2 xl:p-4\",\n attrs: { slot: \"item-title\", to: \"/admin/customers\" },\n slot: \"item-title\"\n },\n [\n _c(\"div\", [\n _vm.getDashboardDataLoaded\n ? _c(\n \"span\",\n {\n staticClass:\n \"text-xl font-semibold leading-tight text-black xl:text-3xl\"\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.getContacts) + \"\\n \")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass:\n \"block mt-1 text-sm leading-tight text-gray-500 xl:text-lg\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.cards.customers\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex items-center\" },\n [_c(\"contact-icon\", { staticClass: \"w-10 h-10 xl:w-12 xl:h-12\" })],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass:\n \"relative flex justify-between p-3 bg-white rounded shadow hover:bg-gray-100 lg:col-span-2 xl:p-4\",\n attrs: { slot: \"item-title\", to: \"/admin/invoices\" },\n slot: \"item-title\"\n },\n [\n _c(\"div\", [\n _vm.getDashboardDataLoaded\n ? _c(\n \"span\",\n {\n staticClass:\n \"text-xl font-semibold leading-tight text-black xl:text-3xl\"\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.getInvoices) + \"\\n \")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass:\n \"block mt-1 text-sm leading-tight text-gray-500 xl:text-lg\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.cards.invoices\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex items-center\" },\n [_c(\"invoice-icon\", { staticClass: \"w-10 h-10 xl:w-12 xl:h-12\" })],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass:\n \"relative flex justify-between p-3 bg-white rounded shadow hover:bg-gray-100 lg:col-span-2 xl:p-4\",\n attrs: { slot: \"item-title\", to: \"/admin/estimates\" },\n slot: \"item-title\"\n },\n [\n _c(\"div\", [\n _vm.getDashboardDataLoaded\n ? _c(\n \"span\",\n {\n staticClass:\n \"text-xl font-semibold leading-tight text-black xl:text-3xl\"\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.getEstimates) + \"\\n \")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass:\n \"block mt-1 text-sm leading-tight text-gray-500 xl:text-lg\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"dashboard.cards.estimates\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex items-center\" },\n [_c(\"estimate-icon\", { staticClass: \"w-10 h-10 xl:w-12 xl:h-12\" })],\n 1\n )\n ]\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n !_vm.getDashboardDataLoaded ? _c(\"base-loader\") : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-6 mt-10 xl:grid-cols-2\" },\n [\n _c(\n \"div\",\n { staticClass: \"due-invoices\" },\n [\n _c(\n \"div\",\n {\n staticClass: \"relative z-10 flex items-center justify-between\"\n },\n [\n _c(\n \"h6\",\n {\n staticClass: \"mb-0 text-xl font-semibold leading-normal\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"dashboard.recent_invoices_card.title\")\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"/admin/invoices\",\n variant: \"primary-outline\"\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"dashboard.recent_invoices_card.view_all\")\n ) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"inv_table\",\n attrs: {\n data: _vm.getDueInvoices,\n \"show-filter\": false,\n \"table-class\": \"table\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"dashboard.recent_invoices_card.due_on\"),\n show: \"formattedDueDate\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"dashboard.recent_invoices_card.due_on\"\n )\n )\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(_vm._s(row.formattedDueDate))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"dashboard.recent_invoices_card.customer\"),\n show: \"user.name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"dashboard.recent_invoices_card.customer\"\n )\n )\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass: \"font-medium text-primary-500\",\n attrs: {\n to: { path: \"invoices/\" + row.id + \"/view\" }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.user.name) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"invoices.status\"),\n \"sort-as\": \"status\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"invoices.status\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n row.status\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(\n row.status\n ).color\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n row.status != \"PARTIALLY_PAID\"\n ? row.status\n : row.status.replace(\"_\", \" \")\n ) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\n \"dashboard.recent_invoices_card.amount_due\"\n ),\n show: \"due_amount\",\n \"sort-as\": \"due_amount\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"dashboard.recent_invoices_card.amount_due\"\n )\n )\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n row.due_amount,\n row.user.currency\n )\n )\n }\n })\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\":\n \"action-dropdown dashboard-recent-invoice-options no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return _c(\n \"sw-dropdown\",\n {},\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"invoices/\" + row.id + \"/edit\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"invoices/\" + row.id + \"/view\"\n }\n },\n [\n _c(\"eye-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.view\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n row.status === \"DRAFT\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.sentInvoice(row.id)\n }\n }\n },\n [\n _c(\"check-circle-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"invoices.mark_as_sent\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeInvoice(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"recent-estimates\" },\n [\n _c(\n \"div\",\n {\n staticClass: \"relative z-10 flex items-center justify-between\"\n },\n [\n _c(\n \"h6\",\n {\n staticClass: \"mb-0 text-xl font-semibold leading-normal\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"dashboard.recent_estimate_card.title\")\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"/admin/estimates\",\n variant: \"primary-outline\"\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"dashboard.recent_estimate_card.view_all\")\n ) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"est_table\",\n attrs: {\n data: _vm.getRecentEstimates,\n \"show-filter\": false,\n \"table-class\": \"table\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"dashboard.recent_estimate_card.date\"),\n show: \"formattedExpiryDate\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$t(\"dashboard.recent_estimate_card.date\")\n )\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(_vm._s(row.formattedExpiryDate))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"dashboard.recent_estimate_card.customer\"),\n show: \"user.name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"dashboard.recent_estimate_card.customer\"\n )\n )\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass: \"font-medium text-primary-500\",\n attrs: {\n to: { path: \"estimates/\" + row.id + \"/view\" }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.user.name) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"estimates.status\"),\n show: \"status\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"estimates.status\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n staticClass: \"px-3 py-1\",\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n row.status\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(\n row.status\n ).color\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.status) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\n \"dashboard.recent_estimate_card.amount_due\"\n ),\n show: \"total\",\n \"sort-as\": \"total\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"dashboard.recent_estimate_card.amount_due\"\n )\n )\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n row.total,\n row.user.currency\n )\n )\n }\n })\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return _c(\n \"sw-dropdown\",\n {},\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"estimates/\" + row.id + \"/edit\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"estimates/\" + row.id + \"/view\"\n }\n },\n [\n _c(\"eye-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.view\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.convertInToinvoice(row.id)\n }\n }\n },\n [\n _c(\"document-text-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.convert_to_invoice\")\n ) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.onMarkAsSent(row.id)\n }\n }\n },\n [\n _c(\"check-circle-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.mark_as_sent\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n row.status !== \"ACCEPTED\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.onMarkAsAccepted(row.id)\n }\n }\n },\n [\n _c(\"check-circle-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.mark_as_accepted\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.status !== \"REJECTED\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.onMarkAsRejected(row.id)\n }\n }\n },\n [\n _c(\"x-circle-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.mark_as_rejected\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeEstimate(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"w-full h-full\" }, [\n _c(\n \"div\",\n { staticClass: \"flex items-center justify-center w-full h-full\" },\n [\n _c(\n \"div\",\n { staticClass: \"flex flex-col items-center justify-center\" },\n [\n _c(\n \"h1\",\n {\n staticClass: \"text-primary-500\",\n staticStyle: { \"font-size\": \"10rem\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.four_zero_four\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"h5\", { staticClass: \"mb-10 text-3xl text-primary-500\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.you_got_lost\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass:\n \"flex items-center w-32 h-12 px-2 py-1 text-base font-medium leading-none text-center text-white whitespace-nowrap rounded bg-primary-500 btn-lg hover:text-white\",\n attrs: { to: \"/admin/dashboard\" }\n },\n [\n _c(\"arrow-left-icon\", { staticClass: \"mr-2 text-white icon\" }),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.go_home\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n { staticClass: \"relative estimate-create-page\" },\n [\n !_vm.isLoadingEstimate && !_vm.isLoadingData\n ? _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitForm($event)\n }\n }\n },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"general.home\"),\n to: \"/admin/dashboard\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$tc(\"estimates.estimate\", 2),\n to: \"/admin/estimates\"\n }\n }),\n _vm._v(\" \"),\n _vm.$route.name === \"estimates.edit\"\n ? _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"estimates.edit_estimate\"),\n to: \"#\",\n active: \"\"\n }\n })\n : _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"estimates.new_estimate\"),\n to: \"#\",\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _vm.$route.name === \"estimates.edit\"\n ? _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: {\n href:\n \"/estimates/pdf/\" +\n _vm.newEstimate.unique_hash,\n \"tag-name\": \"a\",\n target: \"_blank\",\n variant: \"primary-outline\",\n type: \"button\"\n }\n },\n [\n _c(\"span\", { staticClass: \"flex\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.view_pdf\")) +\n \"\\n \"\n )\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\",\n size: \"lg\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.save_estimate\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid-cols-12 gap-8 mt-6 mb-8 lg:grid\" },\n [\n _c(\"customer-select\", {\n staticClass: \"col-span-5 pr-0\",\n attrs: {\n valid: _vm.$v.selectedCustomer,\n \"customer-id\": _vm.customerId\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 col-span-7 gap-4 mt-8 lg:gap-6 lg:mt-0 lg:grid-cols-2\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"reports.estimates.estimate_date\"),\n erorr: _vm.estimateDateError,\n required: \"\"\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.newEstimate.estimate_date.$touch()\n }\n },\n model: {\n value: _vm.newEstimate.estimate_date,\n callback: function($$v) {\n _vm.$set(_vm.newEstimate, \"estimate_date\", $$v)\n },\n expression: \"newEstimate.estimate_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"estimates.due_date\"),\n error: _vm.expiryDateError,\n required: \"\"\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.newEstimate.expiry_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.newEstimate.expiry_date.$touch()\n }\n },\n model: {\n value: _vm.newEstimate.expiry_date,\n callback: function($$v) {\n _vm.$set(_vm.newEstimate, \"expiry_date\", $$v)\n },\n expression: \"newEstimate.expiry_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"lg:mt-0\",\n attrs: {\n label: _vm.$t(\"estimates.estimate_number\"),\n error: _vm.estimateNumError,\n required: \"\"\n }\n },\n [\n _c(\n \"sw-input\",\n {\n staticClass: \"mt-2\",\n attrs: {\n prefix: _vm.estimatePrefix + \" - \",\n invalid: _vm.$v.estimateNumAttribute.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.estimateNumAttribute.$touch()\n }\n },\n model: {\n value: _vm.estimateNumAttribute,\n callback: function($$v) {\n _vm.estimateNumAttribute = $$v\n },\n expression: \"estimateNumAttribute\"\n }\n },\n [\n _c(\"hashtag-icon\", {\n staticClass: \"h-4 ml-1 text-gray-500\",\n attrs: { slot: \"leftIcon\" },\n slot: \"leftIcon\"\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"lg:mt-0\",\n attrs: {\n label: _vm.$t(\"estimates.ref_number\"),\n error: _vm.referenceNumError\n }\n },\n [\n _c(\n \"sw-input\",\n {\n staticClass: \"mt-2\",\n attrs: {\n invalid:\n _vm.$v.newEstimate.reference_number.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.newEstimate.reference_number.$touch()\n }\n },\n model: {\n value: _vm.newEstimate.reference_number,\n callback: function($$v) {\n _vm.$set(\n _vm.newEstimate,\n \"reference_number\",\n $$v\n )\n },\n expression: \"newEstimate.reference_number\"\n }\n },\n [\n _c(\"hashtag-icon\", {\n staticClass: \"h-4 ml-1 text-gray-500\",\n attrs: { slot: \"leftIcon\" },\n slot: \"leftIcon\"\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"table\",\n { staticClass: \"w-full text-center item-table\" },\n [\n _c(\"colgroup\", [\n _c(\"col\", { staticStyle: { width: \"40%\" } }),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"10%\" } }),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"15%\" } }),\n _vm._v(\" \"),\n _vm.discountPerItem === \"YES\"\n ? _c(\"col\", { staticStyle: { width: \"15%\" } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"15%\" } })\n ]),\n _vm._v(\" \"),\n _c(\n \"thead\",\n {\n staticClass:\n \"bg-white border border-gray-200 border-solid\"\n },\n [\n _c(\"tr\", [\n _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-left text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _c(\"span\", { staticClass: \"pl-12\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$tc(\"items.item\", 2)) +\n \"\\n \"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-right text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.item.quantity\")) +\n \"\\n \"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-left text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.item.price\")) +\n \"\\n \"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _vm.discountPerItem === \"YES\"\n ? _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-left text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.item.discount\")\n ) +\n \"\\n \"\n )\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-right text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _c(\n \"span\",\n { staticClass: \"pr-10 column-heading\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.item.amount\")) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"draggable\",\n {\n staticClass: \"item-body\",\n attrs: { tag: \"tbody\", handle: \".handle\" },\n model: {\n value: _vm.newEstimate.items,\n callback: function($$v) {\n _vm.$set(_vm.newEstimate, \"items\", $$v)\n },\n expression: \"newEstimate.items\"\n }\n },\n _vm._l(_vm.newEstimate.items, function(item, index) {\n return _c(\"estimate-item\", {\n key: item.id,\n attrs: {\n index: index,\n \"item-data\": item,\n currency: _vm.currency,\n \"estimate-items\": _vm.newEstimate.items,\n \"tax-per-item\": _vm.taxPerItem,\n \"discount-per-item\": _vm.discountPerItem\n },\n on: {\n remove: _vm.removeItem,\n update: _vm.updateItem,\n itemValidate: _vm.checkItemsData\n }\n })\n }),\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-6 py-3 text-base border-b border-gray-200 border-solid cursor-pointer text-primary-400 hover:bg-gray-200\",\n on: { click: _vm.addItem }\n },\n [\n _c(\"shopping-cart-icon\", { staticClass: \"h-5 mr-2\" }),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"estimates.add_item\")) + \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"block my-10 estimate-foot lg:flex lg:justify-between lg:items-start\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"w-full lg:w-1/2\" },\n [\n _c(\n \"div\",\n { staticClass: \"mb-6\" },\n [\n _c(\n \"sw-popup\",\n {\n ref: \"notePopup\",\n staticClass:\n \"z-10 text-sm font-semibold leading-5 text-primary-400\"\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"float-right mt-1\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n + \" +\n _vm._s(_vm.$t(\"general.insert_note\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"note-select-popup\", {\n attrs: { type: \"Estimate\" },\n on: { select: _vm.onSelectNote }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"estimates.notes\") } },\n [\n _c(\"base-custom-input\", {\n attrs: { fields: _vm.EstimateFields },\n model: {\n value: _vm.newEstimate.notes,\n callback: function($$v) {\n _vm.$set(_vm.newEstimate, \"notes\", $$v)\n },\n expression: \"newEstimate.notes\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.customFields.length > 0\n ? _c(\n \"div\",\n {\n staticClass:\n \"grid gap-x-4 gap-y-2 md:gap-x-8 md:gap-y-4 grid-col-1 md:grid-cols-2\"\n },\n _vm._l(_vm.customFields, function(field, index) {\n return _c(\n \"sw-input-group\",\n {\n key: index,\n attrs: {\n label: field.label,\n required: field.is_required ? true : false\n }\n },\n [\n _c(field.type + \"Field\", {\n tag: \"component\",\n attrs: {\n type: field.type.label,\n field: field,\n \"is-edit\": _vm.isEdit,\n \"invalid-fields\": _vm.invalidFields\n },\n on: { update: _vm.setCustomFieldValue }\n })\n ],\n 1\n )\n }),\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-1\",\n attrs: {\n label: _vm.$t(\"estimates.estimate_template\"),\n required: \"\"\n }\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass:\n \"flex justify-center w-full text-sm lg:w-auto hover:bg-gray-400\",\n attrs: { type: \"button\", variant: \"gray\" },\n on: { click: _vm.openTemplateModal }\n },\n [\n _c(\n \"span\",\n { staticClass: \"flex text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.estimate_template\")\n ) +\n \" \" +\n _vm._s(_vm.getTemplateId) +\n \"\\n \"\n ),\n _c(\"pencil-icon\", {\n staticClass: \"h-5 ml-2 -mr-1\"\n })\n ],\n 1\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"px-5 py-4 mt-6 bg-white border border-gray-200 border-solid rounded estimate-total lg:mt-0\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between w-full\"\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"text-sm font-semibold leading-5 text-gray-500 uppercase\"\n },\n [_vm._v(_vm._s(_vm.$t(\"estimates.sub_total\")))]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"flex items-center justify-center m-0 text-lg text-black uppercase\"\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n _vm.subtotal,\n _vm.currency\n )\n )\n }\n })\n ]\n )\n ]\n ),\n _vm._v(\" \"),\n _vm._l(_vm.allTaxes, function(tax) {\n return _c(\n \"div\",\n {\n key: tax.tax_type_id,\n staticClass:\n \"flex items-center justify-between w-full\"\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"m-0 text-sm font-semibold leading-5 text-gray-500 uppercase\"\n },\n [\n _vm._v(\n _vm._s(tax.name) +\n \" - \" +\n _vm._s(tax.percent) +\n \"%\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"flex items-center justify-center m-0 text-lg text-black uppercase\",\n staticStyle: { \"font-size\": \"18px\" }\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n tax.amount,\n _vm.currency\n )\n )\n }\n })\n ]\n )\n ]\n )\n }),\n _vm._v(\" \"),\n _vm.discountPerItem === \"NO\" ||\n _vm.discountPerItem === null\n ? _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between w-full mt-2\"\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"text-sm font-semibold leading-5 text-gray-500 uppercase\"\n },\n [_vm._v(_vm._s(_vm.$t(\"estimates.discount\")))]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"flex\",\n staticStyle: { width: \"105px\" },\n attrs: { role: \"group\" }\n },\n [\n _c(\"sw-input\", {\n staticClass:\n \"border-r-0 rounded-tr-sm rounded-br-sm\",\n attrs: {\n invalid:\n _vm.$v.newEstimate.discount_val.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.newEstimate.discount_val.$touch()\n }\n },\n model: {\n value: _vm.discount,\n callback: function($$v) {\n _vm.discount = $$v\n },\n expression: \"discount\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n { attrs: { position: \"bottom-end\" } },\n [\n _c(\n \"sw-button\",\n {\n staticStyle: { height: \"43px\" },\n attrs: {\n slot: \"activator\",\n type: \"button\",\n \"data-toggle\": \"dropdown\",\n size: \"discount\",\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": \"false\",\n variant: \"white\"\n },\n slot: \"activator\"\n },\n [\n _c(\n \"span\",\n { staticClass: \"flex\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.newEstimate\n .discount_type == \"fixed\"\n ? _vm.currency.symbol\n : \"%\"\n ) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", {\n staticClass: \"h-5\"\n })\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.selectFixed } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.fixed\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.selectPercentage } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"general.percentage\")\n ) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.taxPerItem === \"NO\" || _vm.taxPerItem === null\n ? _c(\n \"div\",\n _vm._l(_vm.newEstimate.taxes, function(tax, index) {\n return _c(\"tax\", {\n key: tax.id,\n attrs: {\n index: index,\n total: _vm.subtotalWithDiscount,\n tax: tax,\n taxes: _vm.newEstimate.taxes,\n currency: _vm.currency,\n \"total-tax\": _vm.totalSimpleTax\n },\n on: {\n remove: _vm.removeEstimateTax,\n update: _vm.updateTax\n }\n })\n }),\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.taxPerItem === \"NO\" || _vm.taxPerItem === null\n ? _c(\n \"sw-popup\",\n {\n ref: \"taxModal\",\n staticClass:\n \"my-3 text-sm font-semibold leading-5 text-primary-400\"\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"float-right pt-2 pb-4\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n + \" +\n _vm._s(_vm.$t(\"estimates.add_tax\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"tax-select-popup\", {\n attrs: { taxes: _vm.newEstimate.taxes },\n on: { select: _vm.onSelectTax }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between w-full pt-2 mt-5 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"m-0 text-sm font-semibold leading-5 text-gray-500 uppercase\"\n },\n [\n _vm._v(\n _vm._s(_vm.$t(\"estimates.total\")) +\n \" \" +\n _vm._s(_vm.$t(\"estimates.amount\")) +\n \":\"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"flex items-center justify-center text-lg uppercase text-primary-400\"\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n _vm.total,\n _vm.currency\n )\n )\n }\n })\n ]\n )\n ]\n )\n ],\n 2\n )\n ]\n )\n ],\n 1\n )\n : _c(\"base-loader\")\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"col-span-5 pr-0\" }, [\n _vm.selectedCustomer\n ? _c(\n \"div\",\n {\n staticClass:\n \"flex flex-col p-4 bg-white border border-gray-200 border-solid\",\n staticStyle: { \"min-height\": \"170px\" }\n },\n [\n _c(\"div\", { staticClass: \"relative flex justify-between mb-1\" }, [\n _c(\"label\", { staticClass: \"flex-1 font-medium\" }, [\n _vm._v(_vm._s(_vm.selectedCustomer.name))\n ]),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass:\n \"relative my-0 ml-0 mr-6 text-sm font-medium cursor-pointer text-primary-500\",\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.editCustomer($event)\n }\n }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.edit\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass:\n \"relative my-0 ml-0 mr-6 text-sm font-medium cursor-pointer text-primary-500\",\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.resetSelectedCustomer($event)\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.deselect\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"grid grid-cols-2 gap-4 mt-1\" }, [\n _vm.selectedCustomer.billing_address\n ? _c(\"div\", [\n _c(\"div\", { staticClass: \"flex flex-col\" }, [\n _c(\n \"label\",\n {\n staticClass:\n \"mb-1 text-sm font-medium text-gray-500 uppercase whitespace-nowrap\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.bill_to\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex flex-col flex-1 p-0\" }, [\n _vm.selectedCustomer.billing_address.name\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.name\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.address_street_1\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address\n .address_street_1\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.address_street_2\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address\n .address_street_2\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.city &&\n _vm.selectedCustomer.billing_address.state\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.city\n ) +\n \",\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.state\n ) +\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.zip\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.country\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address\n .country.name\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.phone\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.phone\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ])\n ])\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address\n ? _c(\"div\", [\n _c(\"div\", { staticClass: \"flex flex-col\" }, [\n _c(\n \"label\",\n {\n staticClass:\n \"mb-1 text-sm font-medium text-gray-500 uppercase whitespace-nowrap\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.ship_to\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex flex-col flex-1 p-0\" }, [\n _vm.selectedCustomer.shipping_address.name\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address.name\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.address_street_1\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .address_street_1\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.address_street_2\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .address_street_2\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.city &&\n _vm.selectedCustomer.shipping_address\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address.city\n ) +\n \",\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .state\n ) +\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address.zip\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.country\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .country.name\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.phone\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .phone\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ])\n ])\n ])\n : _vm._e()\n ])\n ]\n )\n : _c(\n \"div\",\n [\n _c(\n \"sw-popup\",\n {\n class: [\n \"p-0\",\n {\n \"border border-solid border-danger rounded\":\n _vm.valid.$error\n }\n ]\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex justify-center px-0 py-16 bg-white border border-gray-200 border-solid rounded\",\n staticStyle: { \"min-height\": \"170px\" },\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _c(\"user-icon\", {\n staticClass:\n \"flex justify-center w-10 h-10 p-2 mr-5 text-sm text-white bg-gray-200 rounded-full font-base\"\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"mt-1\" }, [\n _c(\"label\", { staticClass: \"text-lg\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.new_customer\")) +\n \"\\n \"\n ),\n _c(\"span\", { staticClass: \"text-danger\" }, [\n _vm._v(\" * \")\n ])\n ]),\n _vm._v(\" \"),\n _vm.valid.$error && !_vm.valid.required\n ? _c(\"p\", { staticClass: \"text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.errors.required\")) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"customer-select-popup\", {\n attrs: { \"user-id\": _vm.customerId, type: \"estimate\" }\n })\n ],\n 1\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"flex items-center justify-between w-full mt-2 text-sm\" },\n [\n _c(\n \"label\",\n { staticClass: \"font-semibold leading-5 text-gray-500 uppercase\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.tax.name) +\n \" (\" +\n _vm._s(_vm.tax.percent) +\n \"%)\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n { staticClass: \"flex items-center justify-center text-lg text-black\" },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(_vm.tax.amount, _vm.currency)\n )\n }\n }),\n _vm._v(\" \"),\n _c(\"trash-icon\", {\n staticClass: \"h-5 ml-2\",\n on: {\n click: function($event) {\n return _vm.$emit(\"remove\", _vm.index)\n }\n }\n })\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.$t(\"estimates.title\") } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: { to: \"dashboard\", title: _vm.$t(\"general.home\") }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"#\",\n title: _vm.$tc(\"estimates.estimate\", 2),\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.totalEstimates,\n expression: \"totalEstimates\"\n }\n ],\n attrs: { size: \"lg\", variant: \"primary-outline\" },\n on: { click: _vm.toggleFilter }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.filter\")) +\n \"\\n \"\n ),\n _c(_vm.filterIcon, {\n tag: \"component\",\n staticClass: \"w-4 h-4 ml-2 -mr-1\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"ml-4\",\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"estimates/create\",\n size: \"lg\",\n variant: \"primary\"\n }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.new_estimate\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"slide-y-up-transition\",\n [\n _c(\n \"sw-filter-wrapper\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showFilters,\n expression: \"showFilters\"\n }\n ],\n staticClass: \"relative grid grid-flow-col grid-rows\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-2\",\n attrs: { label: _vm.$tc(\"customers.customer\", 1) }\n },\n [\n _c(\"base-customer-select\", {\n ref: \"customerSelect\",\n on: {\n select: _vm.onSelectCustomer,\n deselect: _vm.clearCustomerSearch\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-2 xl:mx-8\",\n attrs: { label: _vm.$t(\"estimates.status\") }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.status,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n placeholder: _vm.$t(\"general.select_a_status\")\n },\n on: {\n select: _vm.setActiveTab,\n remove: function($event) {\n return _vm.clearStatusSearch()\n }\n },\n model: {\n value: _vm.filters.status,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"status\", $$v)\n },\n expression: \"filters.status\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-2\",\n attrs: { label: _vm.$t(\"general.from\"), color: \"black-light\" }\n },\n [\n _c(\"base-date-picker\", {\n attrs: {\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n model: {\n value: _vm.filters.from_date,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"from_date\", $$v)\n },\n expression: \"filters.from_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass:\n \"hidden w-8 h-0 mx-4 border border-gray-400 border-solid xl:block\",\n staticStyle: { \"margin-top\": \"3.5rem\" }\n }),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-2\",\n attrs: { label: _vm.$t(\"general.to\"), color: \"black-light\" }\n },\n [\n _c(\"base-date-picker\", {\n attrs: {\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n model: {\n value: _vm.filters.to_date,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"to_date\", $$v)\n },\n expression: \"filters.to_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-2 xl:ml-8\",\n attrs: {\n label: _vm.$t(\"estimates.estimate_number\"),\n color: \"black-light\"\n }\n },\n [\n _c(\n \"sw-input\",\n {\n model: {\n value: _vm.filters.estimate_number,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"estimate_number\", $$v)\n },\n expression: \"filters.estimate_number\"\n }\n },\n [\n _c(\"hashtag-icon\", {\n staticClass: \"h-5 ml-1 text-gray-500\",\n attrs: { slot: \"leftIcon\" },\n slot: \"leftIcon\"\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"absolute text-sm leading-snug text-black cursor-pointer\",\n staticStyle: { top: \"10px\", right: \"15px\" },\n on: { click: _vm.clearFilter }\n },\n [_vm._v(_vm._s(_vm.$t(\"general.clear_all\")))]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-empty-table-placeholder\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showEmptyScreen,\n expression: \"showEmptyScreen\"\n }\n ],\n attrs: {\n title: _vm.$t(\"estimates.no_estimates\"),\n description: _vm.$t(\"estimates.list_of_estimates\")\n }\n },\n [\n _c(\"moon-walker-icon\", { staticClass: \"mt-5 mb-4\" }),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"actions\",\n \"tag-name\": \"router-link\",\n to: \"/admin/estimates/create\",\n size: \"lg\",\n variant: \"primary-outline\"\n },\n slot: \"actions\"\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.add_new_estimate\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showEmptyScreen,\n expression: \"!showEmptyScreen\"\n }\n ],\n staticClass: \"relative\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"relative mt-5\" },\n [\n _c(\n \"p\",\n {\n staticClass: \"absolute right-0 m-0 text-sm\",\n staticStyle: { top: \"50px\" }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.showing\")) + \": \"\n ),\n _c(\"b\", [_vm._v(_vm._s(_vm.estimates.length))]),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.of\")) + \" \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.totalEstimates))])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-tabs\",\n {\n staticClass: \"mb-10\",\n attrs: { \"active-tab\": _vm.activeTab },\n on: { update: _vm.setStatusFilter }\n },\n [\n _c(\"sw-tab-item\", {\n attrs: { title: _vm.$t(\"general.draft\"), filter: \"DRAFT\" }\n }),\n _vm._v(\" \"),\n _c(\"sw-tab-item\", {\n attrs: { title: _vm.$t(\"general.sent\"), filter: \"SENT\" }\n }),\n _vm._v(\" \"),\n _c(\"sw-tab-item\", {\n attrs: { title: _vm.$t(\"general.all\"), filter: \"\" }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-transition\",\n { attrs: { type: \"fade\" } },\n [\n _vm.selectedEstimates.length\n ? _c(\n \"sw-dropdown\",\n {\n staticClass: \"absolute float-right\",\n staticStyle: { \"margin-top\": \"-70px\" }\n },\n [\n _c(\n \"span\",\n {\n staticClass:\n \"flex block text-sm font-medium cursor-pointer select-none text-primary-400\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.actions\")) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", { staticClass: \"h-5\" })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.removeMultipleEstimates } },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.estimates && _vm.estimates.length,\n expression: \"estimates && estimates.length\"\n }\n ],\n staticClass:\n \"absolute z-10 items-center pl-4 mt-2 select-none md:mt-6\"\n },\n [\n _c(\"sw-checkbox\", {\n staticClass: \"hidden md:inline\",\n attrs: { variant: \"primary\", size: \"sm\" },\n on: { change: _vm.selectAllEstimates },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-checkbox\", {\n staticClass: \"md:hidden\",\n attrs: {\n label: _vm.$t(\"general.select_all\"),\n variant: \"primary\",\n size: \"sm\"\n },\n on: { change: _vm.selectAllEstimates },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: {\n \"show-filter\": false,\n data: _vm.fetchData,\n \"table-class\": \"table\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return _c(\n \"div\",\n { staticClass: \"flex items-center\" },\n [\n _c(\"sw-checkbox\", {\n attrs: {\n id: row.id,\n value: row.id,\n variant: \"primary\",\n size: \"sm\"\n },\n model: {\n value: _vm.selectField,\n callback: function($$v) {\n _vm.selectField = $$v\n },\n expression: \"selectField\"\n }\n })\n ],\n 1\n )\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"estimates.date\"),\n \"sort-as\": \"estimate_date\",\n show: \"formattedEstimateDate\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$tc(\"estimates.estimate\", 1),\n show: \"estimate_number\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$tc(\"estimates.estimate\", 1)))\n ]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass: \"font-medium text-primary-500\",\n attrs: {\n to: { path: \"estimates/\" + row.id + \"/view\" }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.estimate_number) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"estimates.customer\"),\n \"sort-as\": \"name\",\n show: \"name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"estimates.status\"),\n show: \"status\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"estimates.status\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n staticClass: \"px-3 py-1\",\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n row.status\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(row.status)\n .color\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.status) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"invoices.total\"),\n \"sort-as\": \"total\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"estimates.total\")))\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n row.total,\n row.user.currency\n )\n )\n }\n })\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"estimates.action\")) + \" \")\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n { attrs: { containerClass: \"w-56\" } },\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"estimates/\" + row.id + \"/edit\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeEstimate(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"estimates/\" + row.id + \"/view\"\n }\n },\n [\n _c(\"eye-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.view\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.convertInToinvoice(row.id)\n }\n }\n },\n [\n _c(\"document-text-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.convert_to_invoice\")\n ) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n row.status !== \"SENT\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.onMarkAsSent(row.id)\n }\n }\n },\n [\n _c(\"check-circle-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.mark_as_sent\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.status !== \"SENT\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.sendEstimate(row)\n }\n }\n },\n [\n _c(\"paper-airplane-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.send_estimate\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.status == \"SENT\" || row.status == \"VIEWED\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.sendEstimate(row)\n }\n }\n },\n [\n _c(\"paper-airplane-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.resend_estimate\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.status !== \"ACCEPTED\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.onMarkAsAccepted(row.id)\n }\n }\n },\n [\n _c(\"check-circle-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.mark_as_accepted\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.status !== \"REJECTED\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.onMarkAsRejected(row.id)\n }\n }\n },\n [\n _c(\"x-circle-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.mark_as_rejected\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"tr\",\n {\n staticClass:\n \"box-border bg-white border border-gray-200 border-solid rounded-b\"\n },\n [\n _c(\n \"td\",\n { staticClass: \"p-0 text-left align-top\", attrs: { colspan: \"5\" } },\n [\n _c(\"table\", { staticClass: \"w-full\" }, [\n _c(\"colgroup\", [\n _c(\"col\", { staticStyle: { width: \"40%\" } }),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"10%\" } }),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"15%\" } }),\n _vm._v(\" \"),\n _vm.discountPerItem === \"YES\"\n ? _c(\"col\", { staticStyle: { width: \"15%\" } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"15%\" } })\n ]),\n _vm._v(\" \"),\n _c(\"tbody\", [\n _c(\"tr\", [\n _c(\"td\", { staticClass: \"px-5 py-4 text-left align-top\" }, [\n _c(\n \"div\",\n { staticClass: \"flex justify-start\" },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-12 h-5 mt-2 text-gray-400 cursor-move handle\"\n },\n [_c(\"drag-icon\")],\n 1\n ),\n _vm._v(\" \"),\n _c(\"item-select\", {\n ref: \"itemSelect\",\n attrs: {\n invalid: _vm.$v.item.name.$error,\n \"invalid-description\": _vm.$v.item.description.$error,\n item: _vm.item,\n \"tax-per-item\": _vm.taxPerItem,\n taxes: _vm.item.taxes\n },\n on: {\n search: _vm.searchVal,\n select: _vm.onSelectItem,\n deselect: _vm.deselectItem,\n onDesriptionInput: function($event) {\n return _vm.$v.item.description.$touch()\n },\n onSelectItem: function($event) {\n _vm.isSelected = true\n }\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"px-5 py-4 text-right align-top\" },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.item.quantity.$error,\n type: \"text\",\n small: \"\"\n },\n on: {\n keyup: _vm.updateItem,\n input: function($event) {\n return _vm.$v.item.quantity.$touch()\n }\n },\n model: {\n value: _vm.item.quantity,\n callback: function($$v) {\n _vm.$set(_vm.item, \"quantity\", $$v)\n },\n expression: \"item.quantity\"\n }\n }),\n _vm._v(\" \"),\n _vm.$v.item.quantity.$error\n ? _c(\"div\", [\n !_vm.$v.item.quantity.maxLength\n ? _c(\"span\", { staticClass: \"text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"validation.quantity_maxlength\")\n ) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"td\", { staticClass: \"px-5 py-4 text-left align-top\" }, [\n _c(\"div\", { staticClass: \"flex flex-col\" }, [\n _c(\n \"div\",\n { staticClass: \"flex-auto flex-fill bd-highlight\" },\n [\n _c(\n \"div\",\n { staticClass: \"relative w-full\" },\n [\n _c(\"sw-money\", {\n attrs: {\n currency: _vm.customerCurrency,\n invalid: _vm.$v.item.price.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.item.price.$touch()\n }\n },\n model: {\n value: _vm.price,\n callback: function($$v) {\n _vm.price = $$v\n },\n expression: \"price\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.$v.item.price.$error\n ? _c(\"div\", [\n !_vm.$v.item.price.maxLength\n ? _c(\"span\", { staticClass: \"text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"validation.price_maxlength\")\n ) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n : _vm._e()\n ]\n )\n ])\n ]),\n _vm._v(\" \"),\n _vm.discountPerItem === \"YES\"\n ? _c(\"td\", { staticClass: \"px-5 py-4 text-left align-top\" }, [\n _c(\"div\", { staticClass: \"flex flex-col\" }, [\n _c(\n \"div\",\n {\n staticClass: \"flex flex-auto\",\n attrs: { role: \"group\" }\n },\n [\n _c(\"sw-input\", {\n staticClass:\n \"border-r-0 rounded-tr-none rounded-br-none\",\n attrs: {\n invalid: _vm.$v.item.discount_val.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.item.discount_val.$touch()\n }\n },\n model: {\n value: _vm.discount,\n callback: function($$v) {\n _vm.discount = $$v\n },\n expression: \"discount\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\n \"sw-button\",\n {\n staticStyle: { height: \"43px\" },\n attrs: {\n slot: \"activator\",\n type: \"button\",\n \"data-toggle\": \"dropdown\",\n size: \"discount\",\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": \"false\",\n variant: \"white\"\n },\n slot: \"activator\"\n },\n [\n _c(\n \"span\",\n { staticClass: \"flex\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.item.discount_type == \"fixed\"\n ? _vm.currency.symbol\n : \"%\"\n ) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", {\n staticClass: \"h-5\"\n })\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.selectFixed } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.fixed\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.selectPercentage } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.percentage\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"td\", { staticClass: \"px-5 py-4 text-right align-top\" }, [\n _c(\n \"div\",\n { staticClass: \"flex items-center justify-end text-sm\" },\n [\n _c(\"span\", [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(_vm.total, _vm.currency)\n )\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-6 h-10 mx-2 cursor-pointer\"\n },\n [\n _vm.isShowRemoveItemIcon\n ? _c(\"trash-icon\", {\n staticClass: \"h-5 text-gray-700\",\n on: { click: _vm.removeItem }\n })\n : _vm._e()\n ],\n 1\n )\n ]\n )\n ])\n ]),\n _vm._v(\" \"),\n _vm.taxPerItem === \"YES\"\n ? _c(\"tr\", { staticClass: \"tax-tr\" }, [\n _c(\"td\", { staticClass: \"px-5 py-4 text-left align-top\" }),\n _vm._v(\" \"),\n _c(\n \"td\",\n {\n staticClass: \"px-5 py-4 text-left align-top\",\n attrs: { colspan: \"4\" }\n },\n _vm._l(_vm.item.taxes, function(tax, index) {\n return _c(\"tax\", {\n key: tax.id,\n attrs: {\n index: index,\n \"tax-data\": tax,\n taxes: _vm.item.taxes,\n \"discounted-total\": _vm.total,\n \"total-tax\": _vm.totalSimpleTax,\n total: _vm.total,\n currency: _vm.currency\n },\n on: { update: _vm.updateTax, remove: _vm.removeTax }\n })\n }),\n 1\n )\n ])\n : _vm._e()\n ])\n ])\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"flex-1 text-sm\" },\n [\n _vm.item.item_id\n ? _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center h-10 pl-2 bg-gray-200 border border-gray-200 border-solid rounded\"\n },\n [\n _vm._v(\"\\n \" + _vm._s(_vm.item.name) + \"\\n\\n \"),\n _c(\n \"span\",\n {\n staticClass: \"absolute text-gray-400 cursor-pointer\",\n staticStyle: { top: \"8px\", right: \"10px\" },\n on: { click: _vm.deselectItem }\n },\n [_c(\"x-circle-icon\", { staticClass: \"h-5\" })],\n 1\n )\n ]\n )\n : _c(\n \"sw-select\",\n {\n ref: \"baseSelect\",\n staticClass: \"multi-select-item\",\n attrs: {\n options: _vm.items,\n loading: _vm.loading,\n \"show-labels\": false,\n \"preserve-search\": true,\n \"initial-search\": _vm.item.name,\n invalid: _vm.invalid,\n placeholder: _vm.$t(\"estimates.item.select_an_item\"),\n label: \"name\"\n },\n on: { value: _vm.onTextChange, select: _vm.onSelect },\n model: {\n value: _vm.itemSelect,\n callback: function($$v) {\n _vm.itemSelect = $$v\n },\n expression: \"itemSelect\"\n }\n },\n [\n _c(\"div\", { attrs: { slot: \"afterList\" }, slot: \"afterList\" }, [\n _c(\n \"button\",\n {\n staticClass:\n \"flex items-center justify-center w-full p-3 bg-gray-200 border-none outline-none\",\n attrs: { type: \"button\" },\n on: { click: _vm.openItemModal }\n },\n [\n _c(\"shopping-cart-icon\", {\n staticClass: \"h-5 text-primary-400\"\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"ml-2 text-sm leading-none text-primary-400\"\n },\n [_vm._v(_vm._s(_vm.$t(\"general.add_new_item\")))]\n )\n ],\n 1\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"w-full pt-1 text-xs text-light\" },\n [\n _c(\"sw-textarea\", {\n directives: [{ name: \"autoresize\", rawName: \"v-autoresize\" }],\n staticClass: \"w-full text-gray-600 border-none resize-none\",\n attrs: {\n \"invalid-description\": _vm.invalidDescription,\n placeholder: _vm.$t(\"estimates.item.type_item_description\"),\n type: \"text\",\n rows: \"1\",\n variant: \"inv-desc\"\n },\n on: {\n input: function($event) {\n return _vm.$emit(\"onDesriptionInput\")\n }\n },\n model: {\n value: _vm.item.description,\n callback: function($$v) {\n _vm.$set(\n _vm.item,\n \"description\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"item.description\"\n }\n }),\n _vm._v(\" \"),\n _vm.invalidDescription\n ? _c(\"div\", [\n _c(\"span\", { staticClass: \"text-danger\" }, [\n _vm._v(_vm._s(_vm.$tc(\"validation.description_maxlength\")))\n ])\n ])\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"flex items-center justify-between mb-3\" }, [\n _c(\n \"div\",\n {\n staticClass: \"flex items-center text-base\",\n staticStyle: { flex: \"4\" }\n },\n [\n _c(\"label\", { staticClass: \"pr-2 mb-0\", attrs: { align: \"right\" } }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"estimates.tax\")) + \"\\n \")\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-select\",\n {\n attrs: {\n options: _vm.filteredTypes,\n \"allow-empty\": false,\n \"show-labels\": false,\n \"custom-label\": _vm.customLabel,\n placeholder: _vm.$t(\"general.select_a_tax\"),\n \"track-by\": \"name\",\n label: \"name\"\n },\n on: {\n select: function(val) {\n return _vm.onSelectTax(val)\n }\n },\n model: {\n value: _vm.selectedTax,\n callback: function($$v) {\n _vm.selectedTax = $$v\n },\n expression: \"selectedTax\"\n }\n },\n [\n _c(\"div\", { attrs: { slot: \"afterList\" }, slot: \"afterList\" }, [\n _c(\n \"button\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-2 py-2 bg-gray-200 border-none outline-none\",\n attrs: { type: \"button\" },\n on: { click: _vm.openTaxModal }\n },\n [\n _c(\"check-circle-icon\", {\n staticClass: \"h-5 text-primary-400\"\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass: \"ml-2 text-sm leading-none text-primary-400\"\n },\n [_vm._v(_vm._s(_vm.$t(\"estimates.add_new_tax\")))]\n )\n ],\n 1\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\"br\")\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"text-sm text-right\", staticStyle: { flex: \"3\" } },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(_vm.taxAmount, _vm.currency)\n )\n }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-6 h-10 mx-2 cursor-pointer\"\n },\n [\n _vm.taxes.length && _vm.index !== _vm.taxes.length - 1\n ? _c(\"trash-icon\", {\n staticClass: \"h-5 text-gray-700\",\n attrs: { icon: \"trash-alt\" },\n on: { click: _vm.removeTax }\n })\n : _vm._e()\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.estimate\n ? _c(\n \"base-page\",\n { staticClass: \"xl:pl-96\" },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"div\",\n { staticClass: \"mr-3 text-sm\" },\n [\n _vm.estimate.status === \"DRAFT\"\n ? _c(\n \"sw-button\",\n {\n attrs: {\n disabled: _vm.isMarkAsSent,\n variant: \"primary-outline\"\n },\n on: { click: _vm.onMarkAsSent }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.mark_as_sent\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.estimate.status === \"DRAFT\"\n ? _c(\n \"sw-button\",\n {\n staticClass: \"text-sm\",\n attrs: {\n disabled: _vm.isSendingEmail,\n variant: \"primary\"\n },\n on: { click: _vm.onSendEstimate }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.send_estimate\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n { staticClass: \"ml-3\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { slot: \"activator\", variant: \"primary\" },\n slot: \"activator\"\n },\n [_c(\"dots-horizontal-icon\", { staticClass: \"h-5\" })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.copyPdfUrl } },\n [\n _c(\"link-icon\", {\n staticClass: \"h-5 mr-3 text-primary-800\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.copy_pdf_url\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n to:\n \"/admin/estimates/\" +\n _vm.$route.params.id +\n \"/edit\",\n \"tag-name\": \"router-link\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-primary-800\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeEstimate(_vm.$route.params.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-primary-800\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"fixed top-0 left-0 hidden h-full pt-16 pb-4 ml-56 bg-white xl:ml-64 w-88 xl:block\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between px-4 pt-8 pb-2 border border-gray-200 border-solid height-full\"\n },\n [\n _c(\n \"sw-input\",\n {\n staticClass: \"mb-6\",\n attrs: {\n placeholder: _vm.$t(\"general.search\"),\n type: \"text\",\n variant: \"gray\"\n },\n on: {\n input: function($event) {\n return _vm.onSearched()\n }\n },\n model: {\n value: _vm.searchData.searchText,\n callback: function($$v) {\n _vm.$set(_vm.searchData, \"searchText\", $$v)\n },\n expression: \"searchData.searchText\"\n }\n },\n [\n _c(\"search-icon\", {\n staticClass: \"h-5\",\n attrs: { slot: \"rightIcon\" },\n slot: \"rightIcon\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"flex mb-6 ml-3\",\n attrs: { role: \"group\", \"aria-label\": \"First group\" }\n },\n [\n _c(\n \"sw-dropdown\",\n {\n staticClass: \"ml-3\",\n attrs: { position: \"bottom-start\" }\n },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"activator\",\n size: \"md\",\n variant: \"gray-light\"\n },\n slot: \"activator\"\n },\n [_c(\"filter-icon\", { staticClass: \"h-5\" })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"px-2 py-1 pb-2 mb-1 mb-2 text-sm border-b border-gray-200 border-solid\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.sort_by\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex px-1 py-2 cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-3 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_estimate_date\",\n label: _vm.$t(\n \"reports.estimates.estimate_date\"\n ),\n size: \"sm\",\n name: \"filter\",\n value: \"estimate_date\"\n },\n on: { change: _vm.onSearched },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(\n _vm.searchData,\n \"orderByField\",\n $$v\n )\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex px-1 py-2 cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-3 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_due_date\",\n label: _vm.$t(\"estimates.due_date\"),\n value: \"expiry_date\",\n size: \"sm\",\n name: \"filter\"\n },\n on: { change: _vm.onSearched },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(\n _vm.searchData,\n \"orderByField\",\n $$v\n )\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex px-1 py-2 cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-3 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_estimate_number\",\n label: _vm.$t(\n \"estimates.estimate_number\"\n ),\n value: \"estimate_number\",\n size: \"sm\",\n name: \"filter\"\n },\n on: { change: _vm.onSearched },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(\n _vm.searchData,\n \"orderByField\",\n $$v\n )\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.top-center\",\n value: { content: _vm.getOrderName },\n expression: \"{ content: getOrderName }\",\n modifiers: { \"top-center\": true }\n }\n ],\n staticClass: \"ml-1\",\n attrs: { size: \"md\", variant: \"gray-light\" },\n on: { click: _vm.sortData }\n },\n [\n _vm.getOrderBy\n ? _c(\"sort-ascending-icon\", { staticClass: \"h-5\" })\n : _c(\"sort-descending-icon\", { staticClass: \"h-5\" })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isSearching\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _c(\n \"div\",\n {\n staticClass:\n \"h-full pb-32 overflow-y-scroll border-l border-gray-200 border-solid sw-scroll\"\n },\n [\n _vm._l(_vm.estimates, function(estimate, index) {\n return _c(\n \"router-link\",\n {\n key: index,\n class: [\n \"flex justify-between side-estimate p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent\",\n {\n \"bg-gray-100 border-l-4 border-primary-500 border-solid\": _vm.hasActiveUrl(\n estimate.id\n )\n }\n ],\n staticStyle: {\n \"border-bottom\":\n \"1px solid rgba(185, 193, 209, 0.41)\"\n },\n attrs: {\n to: \"/admin/estimates/\" + estimate.id + \"/view\",\n id: \"estimate-\" + estimate.id\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"flex-2\" },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"pr-2 mb-2 text-sm not-italic font-normal leading-5 text-black capitalize truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(estimate.user.name) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"mt-1 mb-2 text-xs not-italic font-medium leading-5 text-gray-600\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(estimate.estimate_number) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n staticClass: \"px-1 text-xs\",\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n estimate.status\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(\n estimate.status\n ).color\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(estimate.status) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex-1 whitespace-nowrap right\" },\n [\n _c(\"div\", {\n staticClass:\n \"mb-2 text-xl not-italic font-semibold leading-8 text-right text-gray-900\",\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n estimate.total,\n estimate.user.currency\n )\n )\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"text-sm not-italic font-normal leading-5 text-right text-gray-600 est-date\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(estimate.formattedEstimateDate) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n ]\n )\n }),\n _vm._v(\" \"),\n !_vm.estimates.length\n ? _c(\n \"p\",\n {\n staticClass:\n \"flex justify-center px-4 mt-5 text-sm text-gray-600\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"estimates.no_matching_estimates\")\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex flex-col min-h-0 mt-8 overflow-hidden sw-scroll\",\n staticStyle: { height: \"75vh\" }\n },\n [\n _c(\"iframe\", {\n staticClass:\n \"flex-1 border border-gray-400 border-solid rounded-md frame-style\",\n attrs: { src: \"\" + _vm.shareableLink }\n })\n ]\n )\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"base-page\", { staticClass: \"relative\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.sendData($event)\n }\n }\n },\n [\n _c(\n \"sw-page-header\",\n { staticClass: \"mb-5\", attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"general.home\"),\n to: \"/admin/dashboard\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$tc(\"expenses.expense\", 2),\n to: \"/admin/expenses\"\n }\n }),\n _vm._v(\" \"),\n _vm.$route.name === \"expenses.edit\"\n ? _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"expenses.edit_expense\"),\n to: \"#\",\n active: \"\"\n }\n })\n : _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"expenses.new_expense\"),\n to: \"#\",\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _vm.isReceiptAvailable\n ? _c(\n \"sw-button\",\n {\n staticClass: \"mr-2\",\n attrs: {\n href: _vm.getReceiptUrl,\n \"tag-name\": \"a\",\n variant: \"primary\",\n outline: \"\",\n size: \"lg\"\n }\n },\n [\n _c(\"download-icon\", { staticClass: \"h-5 mr-2 -ml-1\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"expenses.download_receipt\")) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"hidden md:block\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\",\n size: \"lg\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isEdit\n ? _vm.$t(\"expenses.update_expense\")\n : _vm.$t(\"expenses.save_expense\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _vm.isRequestOnGoing\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _c(\"sw-card\", [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"expenses.category\"),\n error: _vm.categoryError,\n required: \"\"\n }\n },\n [\n _c(\n \"sw-select\",\n {\n ref: \"baseSelect\",\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.categories,\n invalid: _vm.$v.category.$error,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\n \"expenses.categories.select_a_category\"\n ),\n label: \"name\",\n \"track-by\": \"id\"\n },\n on: {\n input: function($event) {\n return _vm.$v.category.$touch()\n }\n },\n model: {\n value: _vm.category,\n callback: function($$v) {\n _vm.category = $$v\n },\n expression: \"category\"\n }\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-4 py-3 bg-gray-200 border-none outline-none\",\n attrs: {\n slot: \"afterList\",\n type: \"button\",\n variant: \"gray-light\"\n },\n on: { click: _vm.openCategoryModal },\n slot: \"afterList\"\n },\n [\n _c(\"shopping-cart-icon\", {\n staticClass: \"h-5 text-center text-primary-400\"\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"ml-2 text-xs leading-none text-primary-400\"\n },\n [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"settings.expense_category.add_new_category\"\n )\n )\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"expenses.expense_date\"),\n error: _vm.dateError,\n required: \"\"\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.expense_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.expense_date.$touch()\n }\n },\n model: {\n value: _vm.formData.expense_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"expense_date\", $$v)\n },\n expression: \"formData.expense_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"expenses.amount\"),\n error: _vm.amountError,\n required: \"\"\n }\n },\n [\n _c(\"sw-money\", {\n staticClass:\n \"focus:border focus:border-solid focus:border-primary-500\",\n attrs: {\n currency: _vm.defaultCurrencyForInput,\n invalid: _vm.$v.formData.amount.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.amount.$touch()\n }\n },\n model: {\n value: _vm.amount,\n callback: function($$v) {\n _vm.amount = $$v\n },\n expression: \"amount\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"expenses.customer\") } },\n [\n _c(\"sw-select\", {\n ref: \"baseSelect\",\n staticClass: \"mt-1\",\n attrs: {\n options: _vm.customers,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\"customers.select_a_customer\"),\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.customer,\n callback: function($$v) {\n _vm.customer = $$v\n },\n expression: \"customer\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"expenses.note\"),\n error: _vm.notesError\n }\n },\n [\n _c(\"sw-textarea\", {\n attrs: { rows: \"4\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.notes.$touch()\n }\n },\n model: {\n value: _vm.formData.notes,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"notes\", $$v)\n },\n expression: \"formData.notes\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"expenses.receipt\") } },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center justify-center h-24 p-6 bg-transparent border-2 border-gray-200 border-dashed rounded-md image-upload-box\",\n attrs: { id: \"receipt-box\" }\n },\n [\n _vm.previewReceipt\n ? _c(\"img\", {\n staticClass:\n \"absolute opacity-100 preview-logo\",\n staticStyle: {\n \"max-height\": \"80%\",\n animation: \"fadeIn 2s ease\"\n },\n attrs: { src: _vm.previewReceipt }\n })\n : _c(\n \"div\",\n { staticClass: \"flex flex-col items-center\" },\n [\n _c(\"cloud-upload-icon\", {\n staticClass:\n \"h-5 mb-2 text-xl leading-6 text-gray-400\"\n }),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"text-xs leading-4 text-center text-gray-400\"\n },\n [\n _vm._v(\n \"\\n Drag a file here or\\n \"\n ),\n _c(\n \"span\",\n {\n staticClass:\n \"cursor-pointer text-primary-500\",\n attrs: { id: \"pick-avatar\" }\n },\n [_vm._v(\"browse\")]\n ),\n _vm._v(\n \"\\n to choose a file\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"sw-avatar\", {\n attrs: {\n \"preview-avatar\": _vm.previewReceipt,\n \"enable-cropper\": false,\n trigger: \"#receipt-box\"\n },\n on: { changed: _vm.onChange },\n scopedSlots: _vm._u([\n {\n key: \"icon\",\n fn: function() {\n return [\n _c(\"cloud-upload-icon\", {\n staticClass:\n \"h-5 mb-2 text-xl leading-6 text-gray-400\"\n })\n ]\n },\n proxy: true\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.customFields.length > 0\n ? _c(\"div\", [\n _c(\n \"div\",\n {\n staticClass: \"grid gap-6 mt-6 grid-col-1 md:grid-cols-2\"\n },\n _vm._l(_vm.customFields, function(field, index) {\n return _c(\n \"sw-input-group\",\n {\n key: index,\n attrs: {\n label: field.label,\n required: field.is_required ? true : false\n }\n },\n [\n _c(field.type + \"Field\", {\n tag: \"component\",\n attrs: {\n type: field.type.label,\n field: field,\n \"is-edit\": _vm.isEdit,\n \"invalid-fields\": _vm.invalidFields\n },\n on: { update: _vm.setCustomFieldValue }\n })\n ],\n 1\n )\n }),\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"block mt-2 md:hidden\" },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"flex w-full\",\n attrs: {\n disabled: _vm.isLoading,\n loading: _vm.isLoading,\n tabindex: 6,\n variant: \"primary\",\n type: \"submit\",\n size: \"lg\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isEdit\n ? _vm.$t(\"expenses.update_expense\")\n : _vm.$t(\"expenses.save_expense\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.$t(\"expenses.title\") } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: { to: \"dashboard\", title: _vm.$t(\"general.home\") }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"#\",\n title: _vm.$tc(\"expenses.expense\", 2),\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.totalExpenses,\n expression: \"totalExpenses\"\n }\n ],\n attrs: { size: \"lg\", variant: \"primary-outline\" },\n on: { click: _vm.toggleFilter }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.filter\")) +\n \"\\n \"\n ),\n _c(_vm.filterIcon, {\n tag: \"component\",\n staticClass: \"w-4 h-4 ml-2 -mr-1\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"ml-4\",\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"expenses/create\",\n size: \"lg\",\n variant: \"primary\"\n }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"expenses.add_expense\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"slide-y-up-transition\",\n [\n _c(\n \"sw-filter-wrapper\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showFilters,\n expression: \"showFilters\"\n }\n ],\n staticClass: \"mt-3\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-3\",\n attrs: { label: _vm.$t(\"expenses.customer\") }\n },\n [\n _c(\"base-customer-select\", {\n ref: \"customerSelect\",\n on: {\n select: _vm.onSelectCustomer,\n deselect: _vm.clearCustomerSearch\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 ml-0 lg:ml-6\",\n attrs: { label: _vm.$t(\"expenses.category\") }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.categories,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\n \"expenses.categories.select_a_category\"\n ),\n label: \"name\"\n },\n on: {\n click: function($event) {\n _vm.filter = !_vm.filter\n }\n },\n model: {\n value: _vm.filters.category,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"category\", $$v)\n },\n expression: \"filters.category\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 ml-0 lg:ml-6\",\n attrs: { label: _vm.$t(\"expenses.from_date\") }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n model: {\n value: _vm.filters.from_date,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"from_date\", $$v)\n },\n expression: \"filters.from_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 ml-0 lg:ml-6\",\n attrs: { label: _vm.$t(\"expenses.to_date\") }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n model: {\n value: _vm.filters.to_date,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"to_date\", $$v)\n },\n expression: \"filters.to_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"absolute text-sm leading-snug text-black cursor-pointer\",\n staticStyle: { top: \"10px\", right: \"15px\" },\n on: { click: _vm.clearFilter }\n },\n [_vm._v(_vm._s(_vm.$t(\"general.clear_all\")))]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-empty-table-placeholder\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showEmptyScreen,\n expression: \"showEmptyScreen\"\n }\n ],\n attrs: {\n title: _vm.$t(\"expenses.no_expenses\"),\n description: _vm.$t(\"expenses.list_of_expenses\")\n }\n },\n [\n _c(\"observatory-icon\", { staticClass: \"mt-5 mb-4\" }),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"actions\",\n \"tag-name\": \"router-link\",\n to: \"/admin/expenses/create\",\n size: \"lg\",\n variant: \"primary-outline\"\n },\n slot: \"actions\"\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"expenses.add_new_expense\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showEmptyScreen,\n expression: \"!showEmptyScreen\"\n }\n ],\n staticClass: \"relative table-container\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center justify-between h-10 mt-5 list-none border-b-2 border-gray-200 border-solid\"\n },\n [\n _c(\"p\", { staticClass: \"text-sm\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.showing\")) + \": \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.expenses.length))]),\n _vm._v(\"\\n\\n \" + _vm._s(_vm.$t(\"general.of\")) + \" \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.totalExpenses))])\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-transition\",\n { attrs: { type: \"fade\" } },\n [\n _vm.selectedExpenses.length\n ? _c(\n \"sw-dropdown\",\n [\n _c(\n \"span\",\n {\n staticClass:\n \"flex block text-sm font-medium cursor-pointer select-none text-primary-400\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.actions\")) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", { staticClass: \"h-5\" })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.removeMultipleExpenses } },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"absolute z-10 items-center pl-4 mt-2 select-none md:mt-12\"\n },\n [\n _c(\"sw-checkbox\", {\n staticClass: \"hidden md:inline\",\n attrs: { variant: \"primary\", size: \"sm\" },\n on: { change: _vm.selectAllExpenses },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-checkbox\", {\n staticClass: \"md:hidden\",\n attrs: {\n label: _vm.$t(\"general.select_all\"),\n variant: \"primary\",\n size: \"sm\"\n },\n on: { change: _vm.selectAllExpenses },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: { \"show-filter\": false, data: _vm.fetchData }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return _c(\n \"div\",\n { staticClass: \"relative block\" },\n [\n _c(\"sw-checkbox\", {\n attrs: {\n id: row.id,\n value: row.id,\n variant: \"primary\",\n size: \"sm\"\n },\n model: {\n value: _vm.selectField,\n callback: function($$v) {\n _vm.selectField = $$v\n },\n expression: \"selectField\"\n }\n })\n ],\n 1\n )\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"expenses.date\"),\n \"sort-as\": \"expense_date\",\n show: \"formattedExpenseDate\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$tc(\"expenses.categories.category\", 1),\n \"sort-as\": \"name\",\n show: \"category.name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(_vm.$tc(\"expenses.categories.category\", 1))\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass: \"font-medium text-primary-500\",\n attrs: {\n to: { path: \"expenses/\" + row.id + \"/edit\" }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.category.name) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"expenses.customer\"),\n \"sort-as\": \"user_name\",\n show: \"user_name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"expenses.customer\")))\n ]),\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(\n \" \" +\n _vm._s(\n row.user_name ? row.user_name : \"Not selected\"\n ) +\n \" \"\n )\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"expenses.note\"),\n \"sort-as\": \"expense_date\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"expenses.note\")))]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"notes\" }, [\n _c(\"div\", { staticClass: \"truncate note w-60\" }, [\n _vm._v(_vm._s(row.notes))\n ])\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"expenses.amount\"),\n \"sort-as\": \"amount\",\n show: \"category.amount\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"expenses.amount\")))]),\n _vm._v(\" \"),\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n row.amount,\n _vm.defaultCurrency\n )\n )\n }\n })\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"expenses.action\")))]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"expenses/\" + row.id + \"/edit\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeExpense(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n { staticClass: \"relative invoice-create-page\" },\n [\n !_vm.isLoadingInvoice && !_vm.isLoadingData\n ? _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitForm($event)\n }\n }\n },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"general.home\"),\n to: \"/admin/dashboard\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$tc(\"invoices.invoice\", 2),\n to: \"/admin/invoices\"\n }\n }),\n _vm._v(\" \"),\n _vm.$route.name === \"invoice.edit\"\n ? _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"invoices.edit_invoice\"),\n to: \"#\",\n active: \"\"\n }\n })\n : _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"invoices.new_invoice\"),\n to: \"#\",\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _vm.$route.name === \"invoices.edit\"\n ? _c(\n \"sw-button\",\n {\n staticClass: \"mr-3\",\n attrs: {\n disabled: _vm.isLoading,\n href:\n \"/invoices/pdf/\" + _vm.newInvoice.unique_hash,\n \"tag-name\": \"a\",\n variant: \"primary-outline\",\n target: \"_blank\"\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.view_pdf\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"flex justify-center w-full lg:w-auto\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\",\n size: \"lg\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.save_invoice\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid-cols-12 gap-8 mt-6 mb-8 lg:grid\" },\n [\n _c(\"customer-select\", {\n staticClass: \"col-span-5 pr-0\",\n attrs: {\n valid: _vm.$v.selectedCustomer,\n \"customer-id\": _vm.customerId\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 col-span-7 gap-4 mt-8 lg:gap-6 lg:mt-0 lg:grid-cols-2\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"invoices.invoice_date\"),\n error: _vm.invoiceDateError,\n required: \"\"\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.newInvoice.invoice_date.$touch()\n }\n },\n model: {\n value: _vm.newInvoice.invoice_date,\n callback: function($$v) {\n _vm.$set(_vm.newInvoice, \"invoice_date\", $$v)\n },\n expression: \"newInvoice.invoice_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"invoices.due_date\"),\n error: _vm.dueDateError,\n required: \"\"\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.newInvoice.due_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.newInvoice.due_date.$touch()\n }\n },\n model: {\n value: _vm.newInvoice.due_date,\n callback: function($$v) {\n _vm.$set(_vm.newInvoice, \"due_date\", $$v)\n },\n expression: \"newInvoice.due_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"lg:mt-0\",\n attrs: {\n label: _vm.$t(\"invoices.invoice_number\"),\n error: _vm.invoiceNumError,\n required: \"\"\n }\n },\n [\n _c(\n \"sw-input\",\n {\n staticClass: \"mt-2\",\n attrs: {\n prefix: _vm.invoicePrefix + \" - \",\n invalid: _vm.$v.invoiceNumAttribute.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.invoiceNumAttribute.$touch()\n }\n },\n model: {\n value: _vm.invoiceNumAttribute,\n callback: function($$v) {\n _vm.invoiceNumAttribute = $$v\n },\n expression: \"invoiceNumAttribute\"\n }\n },\n [\n _c(\"hashtag-icon\", {\n staticClass: \"h-4 ml-1 text-gray-500\",\n attrs: { slot: \"leftIcon\" },\n slot: \"leftIcon\"\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"lg:mt-0\",\n attrs: {\n label: _vm.$t(\"invoices.ref_number\"),\n error: _vm.referenceError\n }\n },\n [\n _c(\n \"sw-input\",\n {\n staticClass: \"mt-2\",\n attrs: {\n invalid:\n _vm.$v.newInvoice.reference_number.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.newInvoice.reference_number.$touch()\n }\n },\n model: {\n value: _vm.newInvoice.reference_number,\n callback: function($$v) {\n _vm.$set(\n _vm.newInvoice,\n \"reference_number\",\n $$v\n )\n },\n expression: \"newInvoice.reference_number\"\n }\n },\n [\n _c(\"hashtag-icon\", {\n staticClass: \"h-4 ml-1 text-gray-500\",\n attrs: { slot: \"leftIcon\" },\n slot: \"leftIcon\"\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"table\",\n { staticClass: \"w-full text-center item-table\" },\n [\n _c(\"colgroup\", [\n _c(\"col\", { staticStyle: { width: \"40%\" } }),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"10%\" } }),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"15%\" } }),\n _vm._v(\" \"),\n _vm.discountPerItem === \"YES\"\n ? _c(\"col\", { staticStyle: { width: \"15%\" } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"15%\" } })\n ]),\n _vm._v(\" \"),\n _c(\n \"thead\",\n {\n staticClass:\n \"bg-white border border-gray-200 border-solid\"\n },\n [\n _c(\"tr\", [\n _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-left text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _c(\"span\", { staticClass: \"pl-12\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$tc(\"items.item\", 2)) +\n \"\\n \"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-right text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.item.quantity\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-left text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.item.price\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _vm.discountPerItem === \"YES\"\n ? _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-left text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.item.discount\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"th\",\n {\n staticClass:\n \"px-5 py-3 text-sm not-italic font-medium leading-5 text-right text-gray-700 border-t border-b border-gray-200 border-solid\"\n },\n [\n _c(\"span\", { staticClass: \"pr-10\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.item.amount\")) +\n \"\\n \"\n )\n ])\n ]\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"draggable\",\n {\n staticClass: \"item-body\",\n attrs: { tag: \"tbody\", handle: \".handle\" },\n model: {\n value: _vm.newInvoice.items,\n callback: function($$v) {\n _vm.$set(_vm.newInvoice, \"items\", $$v)\n },\n expression: \"newInvoice.items\"\n }\n },\n _vm._l(_vm.newInvoice.items, function(item, index) {\n return _c(\"invoice-item\", {\n key: item.id,\n attrs: {\n index: index,\n \"item-data\": item,\n \"invoice-items\": _vm.newInvoice.items,\n currency: _vm.currency,\n \"tax-per-item\": _vm.taxPerItem,\n \"discount-per-item\": _vm.discountPerItem\n },\n on: {\n remove: _vm.removeItem,\n update: _vm.updateItem,\n itemValidate: _vm.checkItemsData\n }\n })\n }),\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-6 py-3 text-base border-b border-gray-200 border-solid cursor-pointer text-primary-400 hover:bg-gray-200\",\n on: { click: _vm.addItem }\n },\n [\n _c(\"shopping-cart-icon\", { staticClass: \"h-5 mr-2\" }),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"invoices.add_item\")) + \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"block my-10 invoice-foot lg:justify-between lg:flex lg:items-start\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"w-full lg:w-1/2\" },\n [\n _c(\n \"div\",\n { staticClass: \"mb-6\" },\n [\n _c(\n \"sw-popup\",\n {\n ref: \"notePopup\",\n staticClass:\n \"z-10 text-sm font-semibold leading-5 text-primary-400\"\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"float-right mt-1\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n + \" +\n _vm._s(_vm.$t(\"general.insert_note\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"note-select-popup\", {\n attrs: { type: \"Invoice\" },\n on: { select: _vm.onSelectNote }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"invoices.notes\") } },\n [\n _c(\"base-custom-input\", {\n attrs: { fields: _vm.InvoiceFields },\n model: {\n value: _vm.newInvoice.notes,\n callback: function($$v) {\n _vm.$set(_vm.newInvoice, \"notes\", $$v)\n },\n expression: \"newInvoice.notes\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.customFields.length > 0\n ? _c(\n \"div\",\n {\n staticClass:\n \"grid gap-x-4 gap-y-2 md:gap-x-8 md:gap-y-4 grid-col-1 md:grid-cols-2\"\n },\n _vm._l(_vm.customFields, function(field, index) {\n return _c(\n \"sw-input-group\",\n {\n key: index,\n attrs: {\n label: field.label,\n required: field.is_required ? true : false\n }\n },\n [\n _c(field.type + \"Field\", {\n tag: \"component\",\n attrs: {\n type: field.type.label,\n field: field,\n \"is-edit\": _vm.isEdit,\n \"invalid-fields\": _vm.invalidFields\n },\n on: { update: _vm.setCustomFieldValue }\n })\n ],\n 1\n )\n }),\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-1\",\n attrs: {\n label: _vm.$t(\"invoices.invoice_template\"),\n required: \"\"\n }\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass:\n \"flex justify-center w-full text-sm text-black lg:w-auto hover:bg-gray-400\",\n attrs: { type: \"button\", variant: \"gray\" },\n on: { click: _vm.openTemplateModal }\n },\n [\n _c(\n \"span\",\n { staticClass: \"flex text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.template\")) +\n \" \" +\n _vm._s(_vm.getTemplateId) +\n \"\\n \"\n ),\n _c(\"pencil-icon\", {\n staticClass: \"h-5 ml-2 -mr-1\"\n })\n ],\n 1\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"px-5 py-4 mt-6 bg-white border border-gray-200 border-solid rounded invoice-total lg:mt-0\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between w-full\"\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"text-sm font-semibold leading-5 text-gray-500 uppercase\"\n },\n [_vm._v(_vm._s(_vm.$t(\"invoices.sub_total\")))]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"flex items-center justify-center m-0 text-lg text-black uppercase\"\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n _vm.subtotal,\n _vm.currency\n )\n )\n }\n })\n ]\n )\n ]\n ),\n _vm._v(\" \"),\n _vm._l(_vm.allTaxes, function(tax) {\n return _c(\n \"div\",\n {\n key: tax.tax_type_id,\n staticClass:\n \"flex items-center justify-between w-full\"\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"m-0 text-sm font-semibold leading-5 text-gray-500 uppercase\"\n },\n [\n _vm._v(\n _vm._s(tax.name) +\n \" - \" +\n _vm._s(tax.percent) +\n \"%\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"flex items-center justify-center m-0 text-lg text-black uppercase\",\n staticStyle: { \"font-size\": \"18px\" }\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n tax.amount,\n _vm.currency\n )\n )\n }\n })\n ]\n )\n ]\n )\n }),\n _vm._v(\" \"),\n _vm.discountPerItem === \"NO\" ||\n _vm.discountPerItem === null\n ? _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between w-full mt-2\"\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"text-sm font-semibold leading-5 text-gray-500 uppercase\"\n },\n [_vm._v(_vm._s(_vm.$t(\"invoices.discount\")))]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"flex\",\n staticStyle: { width: \"105px\" },\n attrs: { role: \"group\" }\n },\n [\n _c(\"sw-input\", {\n staticClass:\n \"border-r-0 rounded-tr-sm rounded-br-sm\",\n attrs: {\n invalid:\n _vm.$v.newInvoice.discount_val.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.newInvoice.discount_val.$touch()\n }\n },\n model: {\n value: _vm.discount,\n callback: function($$v) {\n _vm.discount = $$v\n },\n expression: \"discount\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n { attrs: { position: \"bottom-end\" } },\n [\n _c(\n \"sw-button\",\n {\n staticStyle: { height: \"43px\" },\n attrs: {\n slot: \"activator\",\n type: \"button\",\n \"data-toggle\": \"dropdown\",\n size: \"discount\",\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": \"false\",\n variant: \"white\"\n },\n slot: \"activator\"\n },\n [\n _c(\n \"span\",\n { staticClass: \"flex\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.newInvoice\n .discount_type == \"fixed\"\n ? _vm.currency.symbol\n : \"%\"\n ) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", {\n staticClass: \"h-5\"\n })\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.selectFixed } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.fixed\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.selectPercentage } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"general.percentage\")\n ) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n (_vm.taxPerItem\n ? \"NO\"\n : null)\n ? _c(\n \"div\",\n _vm._l(_vm.newInvoice.taxes, function(tax, index) {\n return _c(\"tax\", {\n key: tax.id,\n attrs: {\n index: index,\n total: _vm.subtotalWithDiscount,\n tax: tax,\n taxes: _vm.newInvoice.taxes,\n currency: _vm.currency,\n \"total-tax\": _vm.totalSimpleTax\n },\n on: {\n remove: _vm.removeInvoiceTax,\n update: _vm.updateTax\n }\n })\n }),\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.taxPerItem === \"NO\" || _vm.taxPerItem === null\n ? _c(\n \"sw-popup\",\n {\n ref: \"taxModal\",\n staticClass:\n \"my-3 text-sm font-semibold leading-5 text-primary-400\"\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"float-right pt-2 pb-5\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n + \" +\n _vm._s(_vm.$t(\"invoices.add_tax\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"tax-select-popup\", {\n attrs: { taxes: _vm.newInvoice.taxes },\n on: { select: _vm.onSelectTax }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between w-full pt-2 mt-5 border-t border-gray-200 border-solid\"\n },\n [\n _c(\n \"label\",\n {\n staticClass:\n \"text-sm font-semibold leading-5 text-gray-500 uppercase\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.total\")) +\n \" \" +\n _vm._s(_vm.$t(\"invoices.amount\")) +\n \":\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"flex items-center justify-center text-lg uppercase text-primary-400\"\n },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n _vm.total,\n _vm.currency\n )\n )\n }\n })\n ]\n )\n ]\n )\n ],\n 2\n )\n ]\n )\n ],\n 1\n )\n : _c(\"base-loader\")\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"col-span-5 pr-0\" }, [\n _vm.selectedCustomer\n ? _c(\n \"div\",\n {\n staticClass:\n \"flex flex-col p-4 bg-white border border-gray-200 border-solid\",\n staticStyle: { \"min-height\": \"170px\" }\n },\n [\n _c(\"div\", { staticClass: \"relative flex justify-between mb-2\" }, [\n _c(\"label\", { staticClass: \"flex-1 font-medium\" }, [\n _vm._v(_vm._s(_vm.selectedCustomer.name))\n ]),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass:\n \"relative my-0 ml-0 mr-6 text-sm font-medium cursor-pointer text-primary-500\",\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.editCustomer($event)\n }\n }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.edit\")) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass:\n \"relative my-0 ml-2 mr-6 text-sm font-medium cursor-pointer text-primary-500\",\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.resetSelectedCustomer($event)\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.deselect\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"grid grid-cols-2 gap-4 mt-1\" }, [\n _vm.selectedCustomer.billing_address\n ? _c(\"div\", [\n _c(\"div\", { staticClass: \"flex flex-col\" }, [\n _c(\n \"label\",\n {\n staticClass:\n \"mb-1 text-sm font-medium text-gray-500 uppercase whitespace-nowrap\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.bill_to\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex flex-col flex-1 p-0\" }, [\n _vm.selectedCustomer.billing_address.name\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.name\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.address_street_1\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address\n .address_street_1\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.address_street_2\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address\n .address_street_2\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.city &&\n _vm.selectedCustomer.billing_address.state\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.city\n ) +\n \",\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.state\n ) +\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.zip\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.country\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address\n .country.name\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.billing_address.phone\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.billing_address.phone\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ])\n ])\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address\n ? _c(\"div\", { staticClass: \"col col-6\" }, [\n _c(\"div\", { staticClass: \"flex flex-col\" }, [\n _c(\n \"label\",\n {\n staticClass:\n \"mb-1 text-sm font-medium text-gray-500 uppercase whitespace-nowrap\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.ship_to\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex flex-col flex-1 p-0\" }, [\n _vm.selectedCustomer.shipping_address.name\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address.name\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.address_street_1\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .address_street_1\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.address_street_2\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .address_street_2\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.city &&\n _vm.selectedCustomer.shipping_address\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address.city\n ) +\n \",\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .state\n ) +\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address.zip\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.country\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .country.name\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedCustomer.shipping_address.phone\n ? _c(\n \"label\",\n {\n staticClass: \"relative w-11/12 text-sm truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.selectedCustomer.shipping_address\n .phone\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ])\n ])\n ])\n : _vm._e()\n ])\n ]\n )\n : _c(\n \"div\",\n [\n _c(\n \"sw-popup\",\n {\n class: [\n \"add-customer p-0\",\n {\n \"border border-solid border-danger rounded\":\n _vm.valid.$error\n }\n ]\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex justify-center px-0 py-16 bg-white border border-gray-200 border-solid rounded-md\",\n staticStyle: { \"min-height\": \"170px\" },\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _c(\"user-icon\", {\n staticClass:\n \"flex justify-center w-10 h-10 p-2 mr-5 text-sm text-white bg-gray-200 rounded-full font-base\"\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"mt-1\" }, [\n _c(\"label\", { staticClass: \"text-lg\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.new_customer\")) +\n \"\\n \"\n ),\n _c(\"span\", { staticClass: \"text-danger\" }, [\n _vm._v(\" * \")\n ])\n ]),\n _vm._v(\" \"),\n _vm.valid.$error && !_vm.valid.required\n ? _c(\"p\", { staticClass: \"text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"validation.required\")) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"customer-select-popup\", {\n attrs: { \"user-id\": _vm.customerId, type: \"invoice\" }\n })\n ],\n 1\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.$t(\"invoices.title\") } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: { to: \"dashboard\", title: _vm.$t(\"general.home\") }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"#\",\n title: _vm.$tc(\"invoices.invoice\", 2),\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.totalInvoices,\n expression: \"totalInvoices\"\n }\n ],\n attrs: { size: \"lg\", variant: \"primary-outline\" },\n on: { click: _vm.toggleFilter }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.filter\")) +\n \"\\n \"\n ),\n _c(_vm.filterIcon, {\n tag: \"component\",\n staticClass: \"w-4 h-4 ml-2 -mr-1\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"ml-4\",\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"/admin/invoices/create\",\n size: \"lg\",\n variant: \"primary\"\n }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.new_invoice\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"slide-y-up-transition\",\n [\n _c(\n \"sw-filter-wrapper\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showFilters,\n expression: \"showFilters\"\n }\n ],\n staticClass: \"relative grid grid-flow-col grid-rows\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-2\",\n attrs: { label: _vm.$tc(\"customers.customer\", 1) }\n },\n [\n _c(\"base-customer-select\", {\n ref: \"customerSelect\",\n on: {\n select: _vm.onSelectCustomer,\n deselect: _vm.clearCustomerSearch\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-2 xl:mx-8\",\n attrs: { label: _vm.$t(\"invoices.status\") }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.status,\n \"group-select\": false,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\"general.select_a_status\"),\n \"allow-empty\": false,\n \"group-values\": \"options\",\n \"group-label\": \"label\",\n \"track-by\": \"name\",\n label: \"name\"\n },\n on: {\n remove: function($event) {\n return _vm.clearStatusSearch()\n },\n select: _vm.setActiveTab\n },\n model: {\n value: _vm.filters.status,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"status\", $$v)\n },\n expression: \"filters.status\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-2\",\n attrs: { label: _vm.$t(\"general.from\") }\n },\n [\n _c(\"base-date-picker\", {\n attrs: {\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n model: {\n value: _vm.filters.from_date,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"from_date\", $$v)\n },\n expression: \"filters.from_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass:\n \"hidden w-8 h-0 mx-4 border border-gray-400 border-solid xl:block\",\n staticStyle: { \"margin-top\": \"3.5rem\" }\n }),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { staticClass: \"mt-2\", attrs: { label: _vm.$t(\"general.to\") } },\n [\n _c(\"base-date-picker\", {\n attrs: {\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n model: {\n value: _vm.filters.to_date,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"to_date\", $$v)\n },\n expression: \"filters.to_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-2 xl:ml-8\",\n attrs: { label: _vm.$t(\"invoices.invoice_number\") }\n },\n [\n _c(\n \"sw-input\",\n {\n model: {\n value: _vm.filters.invoice_number,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"invoice_number\", $$v)\n },\n expression: \"filters.invoice_number\"\n }\n },\n [\n _c(\"hashtag-icon\", {\n staticClass: \"h-5 ml-1 text-gray-500\",\n attrs: { slot: \"leftIcon\" },\n slot: \"leftIcon\"\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"absolute text-sm leading-snug text-black cursor-pointer\",\n staticStyle: { top: \"10px\", right: \"15px\" },\n on: { click: _vm.clearFilter }\n },\n [_vm._v(_vm._s(_vm.$t(\"general.clear_all\")))]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-empty-table-placeholder\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showEmptyScreen,\n expression: \"showEmptyScreen\"\n }\n ],\n attrs: {\n title: _vm.$t(\"invoices.no_invoices\"),\n description: _vm.$t(\"invoices.list_of_invoices\")\n }\n },\n [\n _c(\"moon-walker-icon\", { staticClass: \"mt-5 mb-4\" }),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"actions\",\n \"tag-name\": \"router-link\",\n to: \"/admin/invoices/create\",\n size: \"lg\",\n variant: \"primary-outline\"\n },\n slot: \"actions\"\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"invoices.new_invoice\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showEmptyScreen,\n expression: \"!showEmptyScreen\"\n }\n ],\n staticClass: \"relative\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"relative mt-5\" },\n [\n _c(\n \"p\",\n {\n staticClass: \"absolute right-0 m-0 text-sm\",\n staticStyle: { top: \"50px\" }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.showing\")) + \": \"\n ),\n _c(\"b\", [_vm._v(_vm._s(_vm.invoices.length))]),\n _vm._v(\"\\n\\n \" + _vm._s(_vm.$t(\"general.of\")) + \" \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.totalInvoices))])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-tabs\",\n {\n attrs: { \"active-tab\": _vm.activeTab },\n on: { update: _vm.setStatusFilter }\n },\n [\n _c(\"sw-tab-item\", {\n attrs: { title: _vm.$t(\"general.due\"), filter: \"DUE\" }\n }),\n _vm._v(\" \"),\n _c(\"sw-tab-item\", {\n attrs: { title: _vm.$t(\"general.draft\"), filter: \"DRAFT\" }\n }),\n _vm._v(\" \"),\n _c(\"sw-tab-item\", {\n attrs: { title: _vm.$t(\"general.all\"), filter: \"\" }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-transition\",\n { attrs: { type: \"fade\" } },\n [\n _vm.selectedInvoices.length\n ? _c(\n \"sw-dropdown\",\n {\n staticClass: \"absolute float-right\",\n staticStyle: { \"margin-top\": \"-35px\" }\n },\n [\n _c(\n \"span\",\n {\n staticClass:\n \"flex block text-sm font-medium cursor-pointer select-none text-primary-400\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.actions\")) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", { staticClass: \"h-5\" })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.removeMultipleInvoices } },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.invoices && _vm.invoices.length,\n expression: \"invoices && invoices.length\"\n }\n ],\n staticClass:\n \"absolute z-10 items-center pl-4 mt-2 select-none md:mt-12\"\n },\n [\n _c(\"sw-checkbox\", {\n staticClass: \"hidden md:inline\",\n attrs: { variant: \"primary\", size: \"sm\" },\n on: { change: _vm.selectAllInvoices },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-checkbox\", {\n staticClass: \"md:hidden\",\n attrs: {\n label: _vm.$t(\"general.select_all\"),\n variant: \"primary\",\n size: \"sm\"\n },\n on: { change: _vm.selectAllInvoices },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: {\n \"show-filter\": false,\n data: _vm.fetchData,\n \"table-class\": \"table\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return _c(\n \"div\",\n { staticClass: \"relative block\" },\n [\n _c(\"sw-checkbox\", {\n attrs: {\n id: row.id,\n value: row.id,\n variant: \"primary\",\n size: \"sm\"\n },\n model: {\n value: _vm.selectField,\n callback: function($$v) {\n _vm.selectField = $$v\n },\n expression: \"selectField\"\n }\n })\n ],\n 1\n )\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"invoices.date\"),\n \"sort-as\": \"invoice_date\",\n show: \"formattedInvoiceDate\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"invoices.number\"),\n show: \"invoice_number\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"invoices.number\")))]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass: \"font-medium text-primary-500\",\n attrs: {\n to: { path: \"invoices/\" + row.id + \"/view\" }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.invoice_number) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"invoices.customer\"),\n width: \"20%\",\n show: \"name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"invoices.status\"),\n \"sort-as\": \"status\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"invoices.status\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n row.status\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(row.status)\n .color\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.status.replace(\"_\", \" \")) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"invoices.paid_status\"),\n \"sort-as\": \"paid_status\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"invoices.paid_status\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n row.status\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(row.status)\n .color\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.paid_status.replace(\"_\", \" \")) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"invoices.amount_due\"),\n \"sort-as\": \"due_amount\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"invoices.amount_due\")))\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n row.due_amount,\n row.user.currency\n )\n )\n }\n })\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"invoices.action\")))]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"invoices/\" + row.id + \"/edit\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"invoices/\" + row.id + \"/view\"\n }\n },\n [\n _c(\"eye-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.view\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n row.status == \"DRAFT\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.sendInvoice(row)\n }\n }\n },\n [\n _c(\"paper-airplane-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"invoices.send_invoice\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.status === \"SENT\" || row.status === \"VIEWED\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.sendInvoice(row)\n }\n }\n },\n [\n _c(\"paper-airplane-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"invoices.resend_invoice\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.status == \"DRAFT\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.markInvoiceAsSent(row.id)\n }\n }\n },\n [\n _c(\"check-circle-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"invoices.mark_as_sent\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.status === \"SENT\" ||\n row.status === \"VIEWED\" ||\n row.status === \"OVERDUE\"\n ? _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to:\n \"/admin/payments/\" + row.id + \"/create\"\n }\n },\n [\n _c(\"credit-card-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"payments.record_payment\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.onCloneInvoice(row.id)\n }\n }\n },\n [\n _c(\"document-duplicate-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.clone_invoice\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeInvoice(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"flex items-center justify-between w-full mt-2 text-sm\" },\n [\n _c(\n \"label\",\n { staticClass: \"font-semibold leading-5 text-gray-500 uppercase\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.tax.name) +\n \" (\" +\n _vm._s(_vm.tax.percent) +\n \"%)\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n { staticClass: \"flex items-center justify-center text-lg text-black\" },\n [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(_vm.tax.amount, _vm.currency)\n )\n }\n }),\n _vm._v(\" \"),\n _c(\"trash-icon\", {\n staticClass: \"h-5 ml-2\",\n on: {\n click: function($event) {\n return _vm.$emit(\"remove\", _vm.index)\n }\n }\n })\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"tr\",\n {\n staticClass:\n \"box-border bg-white border border-gray-200 border-solid rounded-b\"\n },\n [\n _c(\n \"td\",\n { staticClass: \"p-0 text-left align-top\", attrs: { colspan: \"5\" } },\n [\n _c(\"table\", { staticClass: \"w-full\" }, [\n _c(\"colgroup\", [\n _c(\"col\", { staticStyle: { width: \"40%\" } }),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"10%\" } }),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"15%\" } }),\n _vm._v(\" \"),\n _vm.discountPerItem === \"YES\"\n ? _c(\"col\", { staticStyle: { width: \"15%\" } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"col\", { staticStyle: { width: \"15%\" } })\n ]),\n _vm._v(\" \"),\n _c(\"tbody\", [\n _c(\"tr\", [\n _c(\"td\", { staticClass: \"px-5 py-4 text-left align-top\" }, [\n _c(\n \"div\",\n { staticClass: \"flex justify-start\" },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-12 h-5 mt-2 text-gray-400 cursor-move handle\"\n },\n [_c(\"drag-icon\")],\n 1\n ),\n _vm._v(\" \"),\n _c(\"item-select\", {\n ref: \"itemSelect\",\n attrs: {\n invalid: _vm.$v.item.name.$error,\n \"invalid-description\": _vm.$v.item.description.$error,\n item: _vm.item,\n \"tax-per-item\": _vm.taxPerItem,\n taxes: _vm.item.taxes\n },\n on: {\n search: _vm.searchVal,\n select: _vm.onSelectItem,\n deselect: _vm.deselectItem,\n onDesriptionInput: function($event) {\n return _vm.$v.item.description.$touch()\n },\n onSelectItem: function($event) {\n _vm.isSelected = true\n }\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"td\",\n { staticClass: \"px-5 py-4 text-right align-top\" },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.item.quantity.$error,\n type: \"text\",\n small: \"\"\n },\n on: {\n keyup: _vm.updateItem,\n input: function($event) {\n return _vm.$v.item.quantity.$touch()\n }\n },\n model: {\n value: _vm.item.quantity,\n callback: function($$v) {\n _vm.$set(_vm.item, \"quantity\", $$v)\n },\n expression: \"item.quantity\"\n }\n }),\n _vm._v(\" \"),\n _vm.$v.item.quantity.$error\n ? _c(\"div\", [\n !_vm.$v.item.quantity.maxLength\n ? _c(\"span\", { staticClass: \"text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"validation.quantity_maxlength\")\n ) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"td\", { staticClass: \"px-5 py-4 text-left align-top\" }, [\n _c(\"div\", { staticClass: \"flex flex-col\" }, [\n _c(\n \"div\",\n { staticClass: \"flex-auto flex-fill bd-highlight\" },\n [\n _c(\n \"div\",\n { staticClass: \"relative w-full\" },\n [\n _c(\"sw-money\", {\n attrs: {\n currency: _vm.customerCurrency,\n invalid: _vm.$v.item.price.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.item.price.$touch()\n }\n },\n model: {\n value: _vm.price,\n callback: function($$v) {\n _vm.price = $$v\n },\n expression: \"price\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.$v.item.price.$error\n ? _c(\"div\", [\n !_vm.$v.item.price.maxLength\n ? _c(\"span\", { staticClass: \"text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"validation.price_maxlength\")\n ) +\n \"\\n \"\n )\n ])\n : _vm._e()\n ])\n : _vm._e()\n ]\n )\n ])\n ]),\n _vm._v(\" \"),\n _vm.discountPerItem === \"YES\"\n ? _c(\"td\", { staticClass: \"px-5 py-4 text-left align-top\" }, [\n _c(\"div\", { staticClass: \"flex flex-col\" }, [\n _c(\n \"div\",\n {\n staticClass: \"flex flex-auto\",\n attrs: { role: \"group\" }\n },\n [\n _c(\"sw-input\", {\n staticClass:\n \"border-r-0 rounded-tr-none rounded-br-none\",\n attrs: {\n invalid: _vm.$v.item.discount_val.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.item.discount_val.$touch()\n }\n },\n model: {\n value: _vm.discount,\n callback: function($$v) {\n _vm.discount = $$v\n },\n expression: \"discount\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\n \"sw-button\",\n {\n staticStyle: { height: \"43px\" },\n attrs: {\n slot: \"activator\",\n type: \"button\",\n \"data-toggle\": \"dropdown\",\n size: \"discount\",\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": \"false\",\n variant: \"white\"\n },\n slot: \"activator\"\n },\n [\n _c(\n \"span\",\n { staticClass: \"flex items-center\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.item.discount_type == \"fixed\"\n ? _vm.currency.symbol\n : \"%\"\n ) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", {\n staticClass: \"h-5\"\n })\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.selectFixed } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.fixed\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.selectPercentage } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.percentage\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"td\", { staticClass: \"px-5 py-4 text-right align-top\" }, [\n _c(\n \"div\",\n { staticClass: \"flex items-center justify-end text-sm\" },\n [\n _c(\"span\", [\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(_vm.total, _vm.currency)\n )\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-6 h-10 mx-2 cursor-pointer\"\n },\n [\n _vm.showRemoveItemIcon\n ? _c(\"trash-icon\", {\n staticClass: \"h-5 text-gray-700\",\n on: { click: _vm.removeItem }\n })\n : _vm._e()\n ],\n 1\n )\n ]\n )\n ])\n ]),\n _vm._v(\" \"),\n _vm.taxPerItem === \"YES\"\n ? _c(\"tr\", { staticClass: \"tax-tr\" }, [\n _c(\"td\", { staticClass: \"px-5 py-4 text-left align-top\" }),\n _vm._v(\" \"),\n _c(\n \"td\",\n {\n staticClass: \"px-5 py-4 text-left align-top\",\n attrs: { colspan: \"4\" }\n },\n _vm._l(_vm.item.taxes, function(tax, index) {\n return _c(\"tax\", {\n key: tax.id,\n attrs: {\n index: index,\n \"tax-data\": tax,\n taxes: _vm.item.taxes,\n \"discounted-total\": _vm.total,\n \"total-tax\": _vm.totalSimpleTax,\n total: _vm.total,\n currency: _vm.currency\n },\n on: { update: _vm.updateTax, remove: _vm.removeTax }\n })\n }),\n 1\n )\n ])\n : _vm._e()\n ])\n ])\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"flex-1 text-sm\" },\n [\n _vm.item.item_id\n ? _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center h-10 pl-2 bg-gray-100 border border-gray-200 border-solid rounded\"\n },\n [\n _vm._v(\"\\n \" + _vm._s(_vm.item.name) + \"\\n\\n \"),\n _c(\n \"span\",\n {\n staticClass: \"absolute text-gray-400 cursor-pointer\",\n staticStyle: { top: \"8px\", right: \"10px\" },\n on: { click: _vm.deselectItem }\n },\n [_c(\"x-circle-icon\", { staticClass: \"h-5\" })],\n 1\n )\n ]\n )\n : _c(\n \"sw-select\",\n {\n ref: \"baseSelect\",\n staticClass: \"multi-select-item\",\n attrs: {\n options: _vm.items,\n loading: _vm.loading,\n \"show-labels\": false,\n \"preserve-search\": true,\n \"initial-search\": _vm.item.name,\n invalid: _vm.invalid,\n placeholder: _vm.$t(\"invoices.item.select_an_item\"),\n label: \"name\"\n },\n on: { value: _vm.onTextChange, select: _vm.onSelect },\n model: {\n value: _vm.itemSelect,\n callback: function($$v) {\n _vm.itemSelect = $$v\n },\n expression: \"itemSelect\"\n }\n },\n [\n _c(\"div\", { attrs: { slot: \"afterList\" }, slot: \"afterList\" }, [\n _c(\n \"button\",\n {\n staticClass:\n \"flex items-center justify-center w-full p-3 bg-gray-200 border-none outline-none\",\n attrs: { type: \"button\" },\n on: { click: _vm.openItemModal }\n },\n [\n _c(\"shopping-cart-icon\", {\n staticClass: \"h-5 mr-2 -ml-2 text-center text-primary-400\"\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"ml-2 text-sm leading-none text-primary-400\"\n },\n [_vm._v(_vm._s(_vm.$t(\"general.add_new_item\")))]\n )\n ],\n 1\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"w-full pt-1 text-xs text-light\" },\n [\n _c(\"sw-textarea\", {\n directives: [{ name: \"autoresize\", rawName: \"v-autoresize\" }],\n staticClass: \"w-full text-xs text-gray-600 border-none resize-none\",\n attrs: {\n \"invalid-description\": _vm.invalidDescription,\n placeholder: _vm.$t(\"invoices.item.type_item_description\"),\n type: \"text\",\n variant: \"inv-desc\"\n },\n on: {\n input: function($event) {\n return _vm.$emit(\"onDesriptionInput\")\n }\n },\n model: {\n value: _vm.item.description,\n callback: function($$v) {\n _vm.$set(_vm.item, \"description\", $$v)\n },\n expression: \"item.description\"\n }\n }),\n _vm._v(\" \"),\n _vm.invalidDescription\n ? _c(\"div\", [\n _c(\"span\", { staticClass: \"text-xs text-danger\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$tc(\"validation.description_maxlength\")) +\n \"\\n \"\n )\n ])\n ])\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"flex items-center justify-between mb-3\" }, [\n _c(\n \"div\",\n { staticClass: \"flex items-center\", staticStyle: { flex: \"4\" } },\n [\n _c(\"label\", { staticClass: \"pr-2 mb-0\", attrs: { align: \"right\" } }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.tax\")) + \"\\n \")\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-select\",\n {\n attrs: {\n options: _vm.filteredTypes,\n \"allow-empty\": false,\n \"show-labels\": false,\n \"custom-label\": _vm.customLabel,\n placeholder: _vm.$t(\"general.select_a_tax\"),\n \"track-by\": \"name\",\n label: \"name\"\n },\n on: {\n select: function(val) {\n return _vm.onSelectTax(val)\n }\n },\n model: {\n value: _vm.selectedTax,\n callback: function($$v) {\n _vm.selectedTax = $$v\n },\n expression: \"selectedTax\"\n }\n },\n [\n _c(\"div\", { attrs: { slot: \"afterList\" }, slot: \"afterList\" }, [\n _c(\n \"button\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-2 py-2 bg-gray-200 border-none outline-none\",\n attrs: { type: \"button\" },\n on: { click: _vm.openTaxModal }\n },\n [\n _c(\"check-circle-icon\", {\n staticClass: \"h-5 text-primary-400\"\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass: \"ml-2 text-sm leading-none text-primary-400\"\n },\n [_vm._v(_vm._s(_vm.$t(\"invoices.add_new_tax\")))]\n )\n ],\n 1\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\"br\")\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass: \"text-sm text-right\",\n staticStyle: { flex: \"3\" },\n domProps: {\n innerHTML: _vm._s(_vm.$utils.formatMoney(_vm.taxAmount, _vm.currency))\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-6 h-10 mx-2 cursor-pointer\"\n },\n [\n _vm.taxes.length && _vm.index !== _vm.taxes.length - 1\n ? _c(\"trash-icon\", {\n staticClass: \"h-5 text-gray-700\",\n on: { click: _vm.removeTax }\n })\n : _vm._e()\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.invoice\n ? _c(\n \"base-page\",\n { staticClass: \"xl:pl-96\" },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"div\",\n { staticClass: \"mr-3 text-sm\" },\n [\n _vm.invoice.status === \"DRAFT\"\n ? _c(\n \"sw-button\",\n {\n attrs: {\n disabled: _vm.isMarkingAsSent,\n variant: \"primary-outline\"\n },\n on: { click: _vm.onMarkAsSent }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.mark_as_sent\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.invoice.status === \"DRAFT\"\n ? _c(\n \"sw-button\",\n {\n staticClass: \"text-sm\",\n attrs: {\n disabled: _vm.isSendingEmail,\n variant: \"primary\"\n },\n on: { click: _vm.onSendInvoice }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.send_invoice\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.invoice.status === \"SENT\" ||\n _vm.invoice.status === \"OVERDUE\" ||\n _vm.invoice.status === \"VIEWED\"\n ? _c(\n \"sw-button\",\n {\n staticClass: \"text-sm\",\n attrs: {\n to:\n \"/admin/payments/\" +\n _vm.$route.params.id +\n \"/create\",\n \"tag-name\": \"router-link\",\n variant: \"primary\"\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"payments.record_payment\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n { staticClass: \"ml-3\" },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"h-10\",\n attrs: { slot: \"activator\", variant: \"primary\" },\n slot: \"activator\"\n },\n [_c(\"dots-horizontal-icon\", { staticClass: \"h-5\" })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.copyPdfUrl } },\n [\n _c(\"link-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.copy_pdf_url\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n to:\n \"/admin/invoices/\" +\n _vm.$route.params.id +\n \"/edit\",\n \"tag-name\": \"router-link\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeInvoice(_vm.$route.params.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"fixed top-0 left-0 hidden h-full pt-16 pb-5 ml-56 bg-white xl:ml-64 w-88 xl:block\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between px-4 pt-8 pb-2 border border-gray-200 border-solid height-full\"\n },\n [\n _c(\n \"sw-input\",\n {\n staticClass: \"mb-6\",\n attrs: {\n placeholder: _vm.$t(\"general.search\"),\n type: \"text\",\n variant: \"gray\"\n },\n on: { input: _vm.onSearch },\n model: {\n value: _vm.searchData.searchText,\n callback: function($$v) {\n _vm.$set(_vm.searchData, \"searchText\", $$v)\n },\n expression: \"searchData.searchText\"\n }\n },\n [\n _c(\"search-icon\", {\n staticClass: \"h-5\",\n attrs: { slot: \"rightIcon\" },\n slot: \"rightIcon\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"flex mb-6 ml-3\",\n attrs: { role: \"group\", \"aria-label\": \"First group\" }\n },\n [\n _c(\n \"sw-dropdown\",\n {\n attrs: {\n \"close-on-select\": false,\n align: \"left\",\n position: \"bottom-start\"\n }\n },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"activator\",\n size: \"md\",\n variant: \"gray-light\"\n },\n slot: \"activator\"\n },\n [_c(\"filter-icon\", { staticClass: \"h-5\" })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"px-2 py-1 mb-2 border-b border-gray-200 border-solid\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.sort_by\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex px-1 py-1 cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-2 text-sm font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_invoice_date\",\n label: _vm.$t(\"invoices.invoice_date\"),\n name: \"filter\",\n size: \"sm\",\n value: \"invoice_date\"\n },\n on: { change: _vm.onSearch },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(\n _vm.searchData,\n \"orderByField\",\n $$v\n )\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex px-1 py-1 cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-2 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_due_date\",\n label: _vm.$t(\"invoices.due_date\"),\n name: \"filter\",\n size: \"sm\",\n value: \"due_date\"\n },\n on: { change: _vm.onSearch },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(\n _vm.searchData,\n \"orderByField\",\n $$v\n )\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex px-1 py-1 cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-2 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_invoice_number\",\n label: _vm.$t(\"invoices.invoice_number\"),\n size: \"sm\",\n type: \"radio\",\n name: \"filter\",\n value: \"invoice_number\"\n },\n on: { change: _vm.onSearch },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(\n _vm.searchData,\n \"orderByField\",\n $$v\n )\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.top-center\",\n value: { content: _vm.getOrderName },\n expression: \"{ content: getOrderName }\",\n modifiers: { \"top-center\": true }\n }\n ],\n staticClass: \"ml-1\",\n attrs: { size: \"md\", variant: \"gray-light\" },\n on: { click: _vm.sortData }\n },\n [\n _vm.getOrderBy\n ? _c(\"sort-ascending-icon\", { staticClass: \"h-5\" })\n : _c(\"sort-descending-icon\", { staticClass: \"h-5\" })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isSearching\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _c(\n \"div\",\n {\n staticClass:\n \"h-full pb-32 overflow-y-scroll border-l border-gray-200 border-solid sw-scroll\"\n },\n [\n _vm._l(_vm.invoices, function(invoice, index) {\n return _c(\n \"router-link\",\n {\n key: index,\n class: [\n \"flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent\",\n {\n \"bg-gray-100 border-l-4 border-primary-500 border-solid\": _vm.hasActiveUrl(\n invoice.id\n )\n }\n ],\n staticStyle: {\n \"border-bottom\":\n \"1px solid rgba(185, 193, 209, 0.41)\"\n },\n attrs: {\n to: \"/admin/invoices/\" + invoice.id + \"/view\",\n id: \"invoice-\" + invoice.id\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"flex-2\" },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"pr-2 mb-2 text-sm not-italic font-normal leading-5 text-black capitalize truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(invoice.user.name) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"mt-1 mb-2 text-xs not-italic font-medium leading-5 text-gray-600\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(invoice.invoice_number) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n staticClass: \"px-1 text-xs\",\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n invoice.status\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(\n invoice.status\n ).color,\n \"font-size\": _vm.$utils.getBadgeStatusColor(\n invoice.status\n ).fontSize\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(invoice.status) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex-1 whitespace-nowrap right\" },\n [\n _c(\"div\", {\n staticClass:\n \"mb-2 text-xl not-italic font-semibold leading-8 text-right text-gray-900\",\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n invoice.due_amount,\n invoice.user.currency\n )\n )\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"text-sm not-italic font-normal leading-5 text-right text-gray-600\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(invoice.formattedInvoiceDate) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n ]\n )\n }),\n _vm._v(\" \"),\n !_vm.invoices.length\n ? _c(\n \"p\",\n {\n staticClass:\n \"flex justify-center px-4 mt-5 text-sm text-gray-600\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"invoices.no_matching_invoices\")\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"flex flex-col min-h-0 mt-8 overflow-hidden\",\n staticStyle: { height: \"75vh\" }\n },\n [\n _c(\"iframe\", {\n staticClass:\n \"flex-1 border border-gray-400 border-solid rounded-md frame-style\",\n attrs: { src: \"\" + _vm.shareableLink }\n })\n ]\n )\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n [\n _c(\n \"sw-page-header\",\n { staticClass: \"mb-3\", attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: { title: _vm.$t(\"general.home\"), to: \"/admin/dashboard\" }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: { title: _vm.$tc(\"items.item\", 2), to: \"/admin/items\" }\n }),\n _vm._v(\" \"),\n _vm.$route.name === \"items.edit\"\n ? _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"items.edit_item\"),\n to: \"#\",\n active: \"\"\n }\n })\n : _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"items.new_item\"),\n to: \"#\",\n active: \"\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"grid grid-cols-12\" }, [\n _c(\"div\", { staticClass: \"col-span-12 md:col-span-6\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitItem($event)\n }\n }\n },\n [\n _c(\n \"sw-card\",\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"items.name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.name.$error,\n focus: \"\",\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"items.price\"),\n error: _vm.priceError,\n required: \"\"\n }\n },\n [\n _c(\"sw-money\", {\n staticClass:\n \"relative w-full focus:border focus:border-solid focus:border-primary-500\",\n attrs: {\n invalid: _vm.$v.formData.price.$error,\n currency: _vm.defaultCurrencyForInput\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.price.$touch()\n }\n },\n model: {\n value: _vm.price,\n callback: function($$v) {\n _vm.price =\n typeof $$v === \"string\" ? $$v.trim() : $$v\n },\n expression: \"price\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: { label: _vm.$t(\"items.unit\") }\n },\n [\n _c(\n \"sw-select\",\n {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.itemUnits,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\"items.select_a_unit\"),\n label: \"name\"\n },\n model: {\n value: _vm.formData.unit,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"unit\", $$v)\n },\n expression: \"formData.unit\"\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-6 py-3 text-base bg-gray-200 cursor-pointer text-primary-400\",\n attrs: { slot: \"afterList\" },\n on: { click: _vm.addItemUnit },\n slot: \"afterList\"\n },\n [\n _c(\"shopping-cart-icon\", {\n staticClass:\n \"h-5 mr-2 -ml-2 text-center text-primary-400\"\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"ml-2 text-sm leading-none text-primary-400\"\n },\n [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"settings.customization.items.add_item_unit\"\n )\n )\n )\n ]\n )\n ],\n 1\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isTaxPerItem\n ? _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: { label: _vm.$t(\"items.taxes\") }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.getTaxTypes,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": true,\n multiple: true,\n \"track-by\": \"tax_type_id\",\n label: \"tax_name\"\n },\n model: {\n value: _vm.formData.taxes,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"taxes\", $$v)\n },\n expression: \"formData.taxes\"\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"items.description\"),\n error: _vm.descriptionError\n }\n },\n [\n _c(\"sw-textarea\", {\n attrs: { rows: \"2\", name: \"description\" },\n on: {\n input: function($event) {\n return _vm.$v.formData.description.$touch()\n }\n },\n model: {\n value: _vm.formData.description,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"description\", $$v)\n },\n expression: \"formData.description\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mb-4\" },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"flex justify-center w-full md:w-auto\",\n attrs: {\n loading: _vm.isLoading,\n variant: \"primary\",\n size: \"lg\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isEdit\n ? _vm.$t(\"items.update_item\")\n : _vm.$t(\"items.save_item\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.$t(\"items.title\") } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: { title: _vm.$t(\"general.home\"), to: \"dashboard\" }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: { title: _vm.$tc(\"items.item\", 2), to: \"#\", active: \"\" }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.totalItems,\n expression: \"totalItems\"\n }\n ],\n attrs: { variant: \"primary-outline\", size: \"lg\" },\n on: { click: _vm.toggleFilter }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.filter\")) +\n \"\\n \"\n ),\n _c(_vm.filterIcon, {\n tag: \"component\",\n staticClass: \"w-4 h-4 ml-2 -mr-1\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"ml-4\",\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"items/create\",\n variant: \"primary\",\n size: \"lg\"\n }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"items.add_item\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"slide-y-up-transition\",\n [\n _c(\n \"sw-filter-wrapper\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showFilters,\n expression: \"showFilters\"\n }\n ]\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 ml-0\",\n attrs: { label: _vm.$tc(\"items.name\") }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: { type: \"text\", name: \"name\", autocomplete: \"off\" },\n model: {\n value: _vm.filters.name,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"name\", $$v)\n },\n expression: \"filters.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 ml-0 lg:ml-6\",\n attrs: { label: _vm.$tc(\"items.unit\") }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.itemUnits,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\"items.select_a_unit\"),\n label: \"name\",\n autocomplete: \"off\"\n },\n model: {\n value: _vm.filters.unit,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"unit\", $$v)\n },\n expression: \"filters.unit\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 ml-0 lg:ml-6\",\n attrs: { label: _vm.$tc(\"items.price\") }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: { type: \"text\", name: \"name\", autocomplete: \"off\" },\n model: {\n value: _vm.filters.price,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"price\", $$v)\n },\n expression: \"filters.price\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"absolute text-sm leading-snug text-gray-900 cursor-pointer\",\n staticStyle: { top: \"10px\", right: \"15px\" },\n on: { click: _vm.clearFilter }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.clear_all\")))]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-empty-table-placeholder\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showEmptyScreen,\n expression: \"showEmptyScreen\"\n }\n ],\n attrs: {\n title: _vm.$t(\"items.no_items\"),\n description: _vm.$t(\"items.list_of_items\")\n }\n },\n [\n _c(\"satellite-icon\", { staticClass: \"mt-5 mb-4\" }),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"actions\",\n \"tag-name\": \"router-link\",\n to: \"/admin/items/create\",\n size: \"lg\",\n variant: \"primary-outline\"\n },\n slot: \"actions\"\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"items.add_new_item\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showEmptyScreen,\n expression: \"!showEmptyScreen\"\n }\n ],\n staticClass: \"relative table-container\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center justify-between h-10 mt-5 list-none border-b-2 border-gray-200 border-solid\"\n },\n [\n _c(\"p\", { staticClass: \"text-sm\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.showing\")) + \": \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.items.length))]),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.of\")) + \" \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.totalItems))])\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-transition\",\n [\n _vm.selectedItems.length\n ? _c(\n \"sw-dropdown\",\n [\n _c(\n \"span\",\n {\n staticClass:\n \"flex block text-sm font-medium cursor-pointer select-none text-primary-400\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.actions\")) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", { staticClass: \"h-5\" })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.removeMultipleItems } },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"absolute z-10 items-center pl-4 mt-2 select-none md:mt-12\"\n },\n [\n _c(\"sw-checkbox\", {\n staticClass: \"hidden md:inline\",\n attrs: { variant: \"primary\", size: \"sm\" },\n on: { change: _vm.selectAllItems },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-checkbox\", {\n staticClass: \"md:hidden\",\n attrs: {\n label: _vm.$t(\"general.select_all\"),\n variant: \"primary\",\n size: \"sm\"\n },\n on: { change: _vm.selectAllItems },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: {\n data: _vm.fetchData,\n \"show-filter\": false,\n \"table-class\": \"table\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return _c(\n \"div\",\n { staticClass: \"custom-control custom-checkbox\" },\n [\n _c(\"sw-checkbox\", {\n attrs: {\n id: row.id,\n value: row.id,\n variant: \"primary\",\n size: \"sm\"\n },\n model: {\n value: _vm.selectField,\n callback: function($$v) {\n _vm.selectField = $$v\n },\n expression: \"selectField\"\n }\n })\n ],\n 1\n )\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"items.name\"),\n show: \"name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"items.name\")))]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass: \"font-medium text-primary-500\",\n attrs: { to: { path: \"items/\" + row.id + \"/edit\" } }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.name) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"items.unit\"),\n show: \"unit_name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"items.unit\")))]),\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(\n row.unit_name ? row.unit_name : \"Not selected\"\n ) +\n \"\\n \"\n )\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"items.price\"),\n show: \"price\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"items.price\")) + \" \")\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n row.price,\n _vm.defaultCurrency\n )\n )\n }\n })\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"items.added_on\"),\n \"sort-as\": \"created_at\",\n show: \"formattedCreatedAt\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"items.action\")) + \" \")\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n to: \"items/\" + row.id + \"/edit\",\n \"tag-name\": \"router-link\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeItems(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.isAppLoaded\n ? _c(\n \"div\",\n { staticClass: \"h-full\" },\n [\n _c(\"base-modal\"),\n _vm._v(\" \"),\n _c(\"site-header\"),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex h-screen pt-16 pb-10 overflow-hidden\" },\n [_c(\"site-sidebar\"), _vm._v(\" \"), _c(\"router-view\")],\n 1\n ),\n _vm._v(\" \"),\n _c(\"site-footer\")\n ],\n 1\n )\n : _c(\n \"div\",\n { staticClass: \"h-full\" },\n [_c(\"refresh-icon\", { staticClass: \"h-6 animate-spin\" })],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"grid h-full grid-cols-12 overflow-y-hidden bg-gray-100\" },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-center w-full max-w-sm col-span-12 p-4 mx-auto text-gray-900 md:p-8 md:col-span-6 lg:col-span-4 flex-2 md:pb-48 md:pt-40\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"w-full\" },\n [\n _vm._m(0),\n _vm._v(\" \"),\n _c(\"router-view\"),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"pt-24 mt-0 text-sm not-italic font-medium leading-relaxed text-left text-gray-500 md:pt-40\"\n },\n [\n _c(\"p\", { staticClass: \"mb-3\" }, [\n _vm._v(_vm._s(_vm.$t(\"layout_login.copyright_crater\")))\n ])\n ]\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex-col items-center justify-center hidden w-full h-full pl-10 bg-no-repeat bg-cover md:col-span-6 lg:col-span-8 md:flex content-box\"\n },\n [\n _c(\"div\", { staticClass: \"pl-20 xl:pl-0\" }, [\n _c(\n \"h1\",\n {\n staticClass:\n \"hidden mb-3 text-3xl font-bold leading-normal text-white xl:text-5xl xl:leading-tight md:none lg:block\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"layout_login.super_simple_invoicing\")) +\n \" \"\n ),\n _c(\"br\"),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"layout_login.for_freelancer\")) +\n \" \"\n ),\n _c(\"br\"),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"layout_login.small_businesses\")) +\n \" \"\n ),\n _c(\"br\")\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"hidden text-sm not-italic font-normal leading-normal text-gray-100 xl:text-base xl:leading-6 md:none lg:block\"\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"layout_login.crater_help\"))\n ),\n _c(\"br\"),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"layout_login.invoices_and_estimates\"))\n ),\n _c(\"br\")\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass: \"absolute z-50 w-full bg-no-repeat content-bottom\"\n })\n ]\n )\n ]\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"a\", { attrs: { href: \"/admin\" } }, [\n _c(\"img\", {\n staticClass: \"block w-48 h-auto max-w-full mb-32 text-primary-400\",\n attrs: { src: \"/assets/img/crater-logo.png\", alt: \"Crater Logo\" }\n })\n ])\n }\n]\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"site-wrapper h-full text-base\" }, [\n _c(\"div\", { staticClass: \"container mx-auto\" }, [_c(\"router-view\")], 1)\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"footer\",\n {\n staticClass:\n \"absolute bottom-0 flex items-center justify-end w-full h-10 py-2 pr-8 text-sm font-normal text-gray-700 bg-white\"\n },\n [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.powered_by\")) + \"\\n\\n \"),\n _c(\n \"a\",\n {\n staticClass: \"pl-1 font-normal text-gray-900\",\n attrs: { href: \"http://bytefury.com/\", target: \"_blank\" }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.bytefury\")) + \"\\n \")]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"header\",\n {\n staticClass:\n \"fixed top-0 left-0 z-40 flex items-center justify-between w-full px-4 py-3 md:h-16 md:px-8 bg-gradient-to-r from-primary-500 to-primary-400\"\n },\n [\n _vm._m(0),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { staticClass: \"float-right h-8 m-0 list-none md:h-9\" },\n [\n _c(\"global-search\", {\n staticClass: \"hidden float-left mr-2 md:block\"\n }),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass:\n \"flex float-left p-1 ml-3 overflow-visible text-sm text-black ease-linear bg-white border-0 rounded cursor-pointer md:hidden md:ml-0 hamburger hamburger--arrowturn\",\n class: { \"is-active\": _vm.isSidebarOpen },\n attrs: { href: \"#\" },\n on: { click: _vm.toggleSidebar }\n },\n [_vm._m(1)]\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n { staticClass: \"relative hidden float-left m-0 md:block\" },\n [\n _c(\n \"sw-dropdown\",\n [\n _c(\n \"a\",\n {\n staticClass:\n \"inline-block text-sm text-black bg-white rounded-sm\",\n staticStyle: { padding: \"6px\" },\n attrs: { slot: \"activator\", href: \"#\" },\n slot: \"activator\"\n },\n [_c(\"plus-icon\", { staticClass: \"w-6 h-6\" })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"/admin/invoices/create\"\n }\n },\n [\n _c(\"document-text-icon\", {\n staticClass: \"h-5 mr-2 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"invoices.new_invoice\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"/admin/estimates/create\"\n }\n },\n [\n _c(\"document-icon\", {\n staticClass: \"h-5 mr-2 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"estimates.new_estimate\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"/admin/customers/create\"\n }\n },\n [\n _c(\"user-icon\", {\n staticClass: \"h-5 mr-2 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"customers.new_customer\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n { staticClass: \"relative block float-left ml-2\" },\n [\n _c(\n \"sw-dropdown\",\n [\n _c(\n \"a\",\n {\n staticClass:\n \"inline-block text-sm text-black bg-white rounded-sm avatar\",\n attrs: {\n slot: \"activator\",\n href: \"#\",\n \"data-toggle\": \"dropdown\",\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": \"false\"\n },\n slot: \"activator\"\n },\n [\n _c(\"img\", {\n staticClass: \"w-8 h-8 rounded-sm md:h-9 md:w-9\",\n attrs: { src: _vm.profilePicture, alt: \"Avatar\" }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"/admin/settings\"\n }\n },\n [\n _c(\"cog-icon\", {\n staticClass: \"w-4 h-4 mr-2 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"navigation.settings\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.logout } },\n [\n _c(\"logout-icon\", {\n staticClass: \"w-4 h-4 mr-2 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"navigation.logout\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"a\",\n {\n staticClass:\n \"float-none text-lg not-italic font-black tracking-wider text-white brand-main md:float-left font-base\",\n attrs: { href: \"/admin/dashboard\" }\n },\n [\n _c(\"img\", {\n staticClass: \"hidden h-6 md:block\",\n attrs: {\n id: \"logo-white\",\n src: \"/assets/img/logo-white.png\",\n alt: \"Crater Logo\"\n }\n }),\n _vm._v(\" \"),\n _c(\"img\", {\n staticClass: \"block h-8 md:hidden\",\n attrs: {\n id: \"logo-mobile\",\n src: \"/assets/img/crater-white-small.png\",\n alt: \"Crater Logo\"\n }\n })\n ]\n )\n },\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"relative inline-block w-6 h-6\" }, [\n _c(\"div\", { staticClass: \"block hamburger-inner top-1/2\" })\n ])\n }\n]\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"sw-transition\", { attrs: { type: \"fade\" } }, [\n _c(\"div\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isSidebarOpen,\n expression: \"isSidebarOpen\"\n }\n ],\n staticClass: \"fixed top-0 left-0 z-20 w-full h-full\",\n staticStyle: { background: \"rgba(48, 75, 88, 0.5)\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.toggleSidebar($event)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"hidden w-56 h-screen pb-32 overflow-y-auto bg-white border-r border-gray-200 border-solid xl:w-64 sw-scroll md:block\"\n },\n _vm._l(_vm.menuItems, function(menuItems, groupIndex) {\n return _c(\n \"sw-list\",\n { key: groupIndex, attrs: { variant: \"sidebar\" } },\n _vm._l(menuItems, function(item, index) {\n return _c(\n \"sw-list-item\",\n {\n key: index,\n attrs: {\n title: _vm.$t(item.title),\n active: _vm.hasActiveUrl(item.route),\n to: item.route,\n \"tag-name\": \"router-link\"\n }\n },\n [\n _c(item.icon, {\n tag: \"component\",\n staticClass: \"h-5\",\n attrs: { slot: \"icon\" },\n slot: \"icon\"\n })\n ],\n 1\n )\n }),\n 1\n )\n }),\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"transition\",\n {\n attrs: {\n \"enter-class\": \"-translate-x-full\",\n \"enter-active-class\":\n \"transition duration-300 ease-in-out transform\",\n \"enter-to-class\": \"translate-x-0\",\n \"leave-active-class\":\n \"transition duration-300 ease-in-out transform\",\n \"leave-class\": \"translate-x-0\",\n \"leave-to-class\": \"-translate-x-full\"\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isSidebarOpen,\n expression: \"isSidebarOpen\"\n }\n ],\n staticClass:\n \"fixed top-0 z-30 w-64 h-screen pt-16 pb-32 overflow-y-auto bg-white border-r border-gray-200 border-solid sw-scroll md:hidden\"\n },\n _vm._l(_vm.menuItems, function(menuItems, groupIndex) {\n return _c(\n \"sw-list\",\n { key: groupIndex, attrs: { variant: \"sidebar\" } },\n _vm._l(menuItems, function(item, index) {\n return _c(\n \"sw-list-item\",\n {\n key: index,\n attrs: {\n title: _vm.$t(item.title),\n active: _vm.hasActiveUrl(item.route),\n to: item.route,\n \"tag-name\": \"router-link\"\n },\n nativeOn: {\n click: function($event) {\n return _vm.toggleSidebar($event)\n }\n }\n },\n [\n _c(item.icon, {\n tag: \"component\",\n staticClass: \"h-5\",\n attrs: { slot: \"icon\" },\n slot: \"icon\"\n })\n ],\n 1\n )\n }),\n 1\n )\n }),\n 1\n )\n ]\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"base-page\", { staticClass: \"relative payment-create\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitPaymentData($event)\n }\n }\n },\n [\n _c(\n \"sw-page-header\",\n { staticClass: \"mb-5\", attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"general.home\"),\n to: \"/admin/dashboard\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$tc(\"payments.payment\", 2),\n to: \"/admin/payments\"\n }\n }),\n _vm._v(\" \"),\n _vm.$route.name === \"payments.edit\"\n ? _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"payments.edit_payment\"),\n to: \"#\",\n active: \"\"\n }\n })\n : _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"payments.new_payment\"),\n to: \"#\",\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"hidden sm:flex\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\",\n size: \"lg\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isEdit\n ? _vm.$t(\"payments.update_payment\")\n : _vm.$t(\"payments.save_payment\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _vm.isRequestOnGoing\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _c(\n \"sw-card\",\n [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"payments.date\"),\n error: _vm.DateError,\n required: \"\"\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-1\",\n attrs: {\n invalid: _vm.$v.formData.payment_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.payment_date.$touch()\n }\n },\n model: {\n value: _vm.formData.payment_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"payment_date\", $$v)\n },\n expression: \"formData.payment_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"payments.payment_number\"),\n error: _vm.paymentNumError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-1\",\n attrs: {\n prefix: _vm.paymentPrefix + \" - \",\n invalid: _vm.$v.paymentNumAttribute.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.paymentNumAttribute.$touch()\n }\n },\n model: {\n value: _vm.paymentNumAttribute,\n callback: function($$v) {\n _vm.paymentNumAttribute =\n typeof $$v === \"string\" ? $$v.trim() : $$v\n },\n expression: \"paymentNumAttribute\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"payments.customer\"),\n error: _vm.customerError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-1\",\n attrs: {\n options: _vm.customers,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n disabled: _vm.isEdit,\n placeholder: _vm.$t(\"customers.select_a_customer\"),\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.customer,\n callback: function($$v) {\n _vm.customer = $$v\n },\n expression: \"customer\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"payments.invoice\") } },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-1\",\n attrs: {\n options: _vm.invoiceList,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n disabled: _vm.isEdit,\n placeholder: _vm.$t(\"invoices.select_invoice\"),\n \"custom-label\": _vm.invoiceWithAmount,\n \"track-by\": \"invoice_number\"\n },\n model: {\n value: _vm.invoice,\n callback: function($$v) {\n _vm.invoice = $$v\n },\n expression: \"invoice\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"payments.amount\"),\n error: _vm.amountError,\n required: \"\"\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"relative w-full mt-1\" },\n [\n _c(\"sw-money\", {\n staticClass:\n \"relative w-full focus:border focus:border-solid focus:border-primary-500\",\n attrs: {\n currency: _vm.customerCurrency,\n invalid: _vm.$v.formData.amount.$error\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.amount.$touch()\n }\n },\n model: {\n value: _vm.amount,\n callback: function($$v) {\n _vm.amount = $$v\n },\n expression: \"amount\"\n }\n })\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"payments.payment_mode\") } },\n [\n _c(\n \"sw-select\",\n {\n staticClass: \"mt-1\",\n attrs: {\n options: _vm.paymentModes,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\n \"payments.select_payment_mode\"\n ),\n \"max-height\": 150,\n label: \"name\"\n },\n model: {\n value: _vm.formData.payment_method,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"payment_method\", $$v)\n },\n expression: \"formData.payment_method\"\n }\n },\n [\n _c(\n \"div\",\n {\n attrs: { slot: \"afterList\" },\n slot: \"afterList\"\n },\n [\n _c(\n \"button\",\n {\n staticClass:\n \"flex items-center justify-center w-full px-2 py-2 bg-gray-200 border-none outline-none text-primary-400\",\n attrs: { type: \"button\" },\n on: { click: _vm.addPaymentMode }\n },\n [\n _c(\"shopping-cart-icon\", {\n staticClass: \"h-5 mr-3 text-primary-400\"\n }),\n _vm._v(\" \"),\n _c(\"label\", [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"settings.customization.payments.add_payment_mode\"\n )\n )\n )\n ])\n ],\n 1\n )\n ]\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.customFields.length > 0\n ? _c(\"div\", [\n _c(\n \"div\",\n {\n staticClass:\n \"grid gap-6 mt-6 grid-col-1 md:grid-cols-2\"\n },\n _vm._l(_vm.customFields, function(field, index) {\n return _c(\n \"sw-input-group\",\n {\n key: index,\n attrs: {\n label: field.label,\n required: field.is_required ? true : false\n }\n },\n [\n _c(field.type + \"Field\", {\n tag: \"component\",\n attrs: {\n type: field.type.label,\n field: field,\n \"is-edit\": _vm.isEdit,\n \"invalid-fields\": _vm.invalidFields\n },\n on: { update: _vm.setCustomFieldValue }\n })\n ],\n 1\n )\n }),\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-popup\",\n {\n ref: \"notePopup\",\n staticClass:\n \"my-6 text-sm font-semibold leading-5 text-primary-400\"\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"float-right mt-1\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n + \" +\n _vm._s(_vm.$t(\"general.insert_note\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"note-select-popup\", {\n attrs: { type: \"Payment\" },\n on: { select: _vm.onSelectNote }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: { label: _vm.$t(\"payments.note\") }\n },\n [\n _c(\"base-custom-input\", {\n staticClass: \"mb-4\",\n attrs: { fields: _vm.PaymentFields },\n model: {\n value: _vm.formData.notes,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"notes\", $$v)\n },\n expression: \"formData.notes\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"flex w-full mt-4 sm:hidden md:hidden\",\n attrs: {\n disabled: _vm.isLoading,\n loading: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isEdit\n ? _vm.$t(\"payments.update_payment\")\n : _vm.$t(\"payments.save_payment\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n { staticClass: \"payments\" },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.$t(\"payments.title\") } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: { to: \"dashboard\", title: _vm.$t(\"general.home\") }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"#\",\n title: _vm.$tc(\"payments.payment\", 2),\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.totalPayments,\n expression: \"totalPayments\"\n }\n ],\n attrs: { variant: \"primary-outline\", size: \"lg\" },\n on: { click: _vm.toggleFilter }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.filter\")) +\n \"\\n \"\n ),\n _c(_vm.filterIcon, {\n tag: \"component\",\n staticClass: \"w-4 h-4 ml-2 -mr-1\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"ml-4\",\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"payments/create\",\n variant: \"primary\",\n size: \"lg\"\n }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"payments.add_payment\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"slide-y-up-transition\",\n [\n _c(\n \"sw-filter-wrapper\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showFilters,\n expression: \"showFilters\"\n }\n ],\n staticClass: \"mt-3\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2\",\n attrs: {\n label: _vm.$t(\"payments.customer\"),\n color: \"black-light\"\n }\n },\n [\n _c(\"base-customer-select\", {\n ref: \"customerSelect\",\n on: {\n select: _vm.onSelectCustomer,\n deselect: _vm.clearCustomerSearch\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 lg:ml-6\",\n attrs: { label: _vm.$t(\"payments.payment_number\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n placeholder: _vm.$t(_vm.payments.payment_number),\n name: \"payment_number\"\n },\n model: {\n value: _vm.filters.payment_number,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"payment_number\", $$v)\n },\n expression: \"filters.payment_number\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 lg:ml-6\",\n attrs: { label: _vm.$t(\"payments.payment_mode\") }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.paymentModes,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\"payments.payment_mode\"),\n label: \"name\"\n },\n model: {\n value: _vm.filters.payment_mode,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"payment_mode\", $$v)\n },\n expression: \"filters.payment_mode\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"absolute text-sm leading-snug text-gray-900 cursor-pointer\",\n staticStyle: { top: \"10px\", right: \"15px\" },\n on: { click: _vm.clearFilter }\n },\n [_vm._v(_vm._s(_vm.$t(\"general.clear_all\")))]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.showEmptyScreen\n ? _c(\n \"sw-empty-table-placeholder\",\n {\n attrs: {\n title: _vm.$t(\"payments.no_payments\"),\n description: _vm.$t(\"payments.list_of_payments\")\n }\n },\n [\n _c(\"capsule-icon\", { staticClass: \"mt-5 mb-4\" }),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"actions\",\n \"tag-name\": \"router-link\",\n to: \"/admin/payments/create\",\n size: \"lg\",\n variant: \"primary-outline\"\n },\n slot: \"actions\"\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"payments.add_new_payment\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showEmptyScreen,\n expression: \"!showEmptyScreen\"\n }\n ],\n staticClass: \"relative table-container\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center justify-between h-10 mt-5 list-none border-b-2 border-gray-200 border-solid\"\n },\n [\n _c(\"p\", { staticClass: \"text-sm\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.showing\")) + \": \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.payments.length))]),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.of\")) + \" \"),\n _c(\"b\", [_vm._v(_vm._s(_vm.totalPayments))])\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-transition\",\n { attrs: { type: \"fade\" } },\n [\n _vm.selectedPayments.length\n ? _c(\n \"sw-dropdown\",\n [\n _c(\n \"span\",\n {\n staticClass:\n \"flex block text-sm font-medium cursor-pointer select-none text-primary-400\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.actions\")) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", { staticClass: \"h-5\" })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.removeMultiplePayments } },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"absolute z-10 items-center pl-4 mt-2 select-none md:mt-12\"\n },\n [\n _c(\"sw-checkbox\", {\n staticClass: \"hidden md:inline\",\n attrs: { variant: \"primary\", size: \"sm\" },\n on: { change: _vm.selectAllPayments },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-checkbox\", {\n staticClass: \"md:hidden\",\n attrs: {\n label: _vm.$t(\"general.select_all\"),\n variant: \"primary\",\n size: \"sm\"\n },\n on: { change: _vm.selectAllPayments },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: {\n data: _vm.fetchData,\n \"show-filter\": false,\n \"table-class\": \"table\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return _c(\n \"div\",\n { staticClass: \"relative block\" },\n [\n _c(\"sw-checkbox\", {\n attrs: {\n id: row.id,\n value: row.id,\n variant: \"primary\",\n size: \"sm\"\n },\n model: {\n value: _vm.selectField,\n callback: function($$v) {\n _vm.selectField = $$v\n },\n expression: \"selectField\"\n }\n })\n ],\n 1\n )\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"payments.date\"),\n \"sort-as\": \"payment_date\",\n show: \"formattedPaymentDate\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"payments.payment_number\"),\n show: \"payment_number\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"payments.payment_number\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass: \"font-medium text-primary-500\",\n attrs: {\n to: { path: \"payments/\" + row.id + \"/view\" }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.payment_number) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"payments.customer\"),\n show: \"name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"payments.payment_mode\"),\n show: \"payment_mode\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"payments.payment_mode\")))\n ]),\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(\n row.payment_mode\n ? row.payment_mode\n : \"Not selected\"\n ) +\n \"\\n \"\n )\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"payments.invoice\"),\n \"sort-as\": \"invoice_id\",\n show: \"invoice_number\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"invoices.invoice_number\")))\n ]),\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(\n row.invoice_number\n ? row.invoice_number\n : \"No Invoice\"\n ) +\n \"\\n \"\n )\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: { sortable: true, label: _vm.$t(\"payments.amount\") },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"payments.amount\")))]),\n _vm._v(\" \"),\n _c(\"div\", {\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n row.amount,\n row.user.currency\n )\n )\n }\n })\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"payments.action\")))]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"payments/\" + row.id + \"/edit\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"payments/\" + row.id + \"/view\"\n }\n },\n [\n _c(\"eye-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.view\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removePayment(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.payment\n ? _c(\n \"base-page\",\n { staticClass: \"xl:pl-96\" },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n disabled: _vm.isSendingEmail,\n variant: \"primary\"\n },\n on: { click: _vm.onPaymentSend }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"payments.send_payment_receipt\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n { staticClass: \"ml-3\" },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"h-10\",\n attrs: { slot: \"activator\", variant: \"primary\" },\n slot: \"activator\"\n },\n [_c(\"dots-horizontal-icon\", { staticClass: \"h-5\" })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.copyPdfUrl } },\n [\n _c(\"link-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.copy_pdf_url\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n to:\n \"/admin/payments/\" +\n _vm.$route.params.id +\n \"/edit\",\n \"tag-name\": \"router-link\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removePayment(_vm.$route.params.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"fixed top-0 left-0 hidden h-full pt-16 pb-4 ml-56 bg-white xl:ml-64 w-88 xl:block\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"flex items-center justify-between px-4 pt-8 pb-2 border border-gray-200 border-solid height-full\"\n },\n [\n _c(\n \"sw-input\",\n {\n staticClass: \"mb-6\",\n attrs: {\n placeholder: _vm.$t(\"general.search\"),\n type: \"text\",\n variant: \"gray\"\n },\n on: { input: _vm.onSearch },\n model: {\n value: _vm.searchData.searchText,\n callback: function($$v) {\n _vm.$set(_vm.searchData, \"searchText\", $$v)\n },\n expression: \"searchData.searchText\"\n }\n },\n [\n _c(\"search-icon\", {\n staticClass: \"h-5\",\n attrs: { slot: \"rightIcon\" },\n slot: \"rightIcon\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"flex mb-6 ml-3\",\n attrs: { role: \"group\", \"aria-label\": \"First group\" }\n },\n [\n _c(\n \"sw-dropdown\",\n { attrs: { position: \"bottom-start\" } },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"activator\",\n size: \"md\",\n variant: \"gray-light\"\n },\n slot: \"activator\"\n },\n [_c(\"filter-icon\", { staticClass: \"h-5\" })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"px-2 pb-2 mb-1 text-sm border-b border-gray-200 border-solid\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.sort_by\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-3 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_invoice_number\",\n label: _vm.$t(\"invoices.title\"),\n size: \"sm\",\n name: \"filter\",\n value: \"invoice_number\"\n },\n on: { change: _vm.onSearch },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(\n _vm.searchData,\n \"orderByField\",\n $$v\n )\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-3 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_payment_date\",\n label: _vm.$t(\"payments.date\"),\n size: \"sm\",\n name: \"filter\",\n value: \"payment_date\"\n },\n on: { change: _vm.onSearch },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(\n _vm.searchData,\n \"orderByField\",\n $$v\n )\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { staticClass: \"flex cursor-pointer\" },\n [\n _c(\n \"sw-input-group\",\n { staticClass: \"-mt-3 font-normal\" },\n [\n _c(\"sw-radio\", {\n attrs: {\n id: \"filter_payment_number\",\n label: _vm.$t(\"payments.payment_number\"),\n size: \"sm\",\n name: \"filter\",\n value: \"payment_number\"\n },\n on: { change: _vm.onSearch },\n model: {\n value: _vm.searchData.orderByField,\n callback: function($$v) {\n _vm.$set(\n _vm.searchData,\n \"orderByField\",\n $$v\n )\n },\n expression: \"searchData.orderByField\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.top-center\",\n value: { content: _vm.getOrderName },\n expression: \"{ content: getOrderName }\",\n modifiers: { \"top-center\": true }\n }\n ],\n staticClass: \"ml-1\",\n attrs: { size: \"md\", variant: \"gray-light\" },\n on: { click: _vm.sortData }\n },\n [\n _vm.getOrderBy\n ? _c(\"sort-ascending-icon\", { staticClass: \"h-5\" })\n : _c(\"sort-descending-icon\", { staticClass: \"h-5\" })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isSearching\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _c(\n \"div\",\n {\n staticClass:\n \"h-full pb-32 overflow-y-scroll border-l border-gray-200 border-solid sw-scroll\"\n },\n [\n _vm._l(_vm.payments, function(payment, index) {\n return _c(\n \"router-link\",\n {\n key: index,\n class: [\n \"flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent\",\n {\n \"bg-gray-100 border-l-4 border-primary-500 border-solid\": _vm.hasActiveUrl(\n payment.id\n )\n }\n ],\n staticStyle: {\n \"border-bottom\":\n \"1px solid rgba(185, 193, 209, 0.41)\"\n },\n attrs: {\n to: \"/admin/payments/\" + payment.id + \"/view\",\n id: \"payment-\" + payment.id\n }\n },\n [\n _c(\"div\", { staticClass: \"flex-2\" }, [\n _c(\n \"div\",\n {\n staticClass:\n \"pr-2 mb-2 text-sm not-italic font-normal leading-5 text-black capitalize truncate\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(payment.user.name) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"mb-1 text-xs not-italic font-medium leading-5 text-gray-500 capitalize\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(payment.payment_number) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"mb-1 text-xs not-italic font-medium leading-5 text-gray-500 capitalize\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(payment.invoice_number) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex-1 whitespace-nowrap right\" },\n [\n _c(\"div\", {\n staticClass:\n \"mb-2 text-xl not-italic font-semibold leading-8 text-right text-gray-900\",\n domProps: {\n innerHTML: _vm._s(\n _vm.$utils.formatMoney(\n payment.amount,\n payment.user.currency\n )\n )\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"text-sm text-right text-gray-500 non-italic\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(payment.formattedPaymentDate) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n ]\n )\n }),\n _vm._v(\" \"),\n !_vm.payments.length\n ? _c(\n \"p\",\n {\n staticClass:\n \"flex justify-center px-4 mt-5 text-sm text-gray-600\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"payments.no_matching_payments\")\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"flex flex-col min-h-0 mt-8 overflow-hidden\",\n staticStyle: { height: \"75vh\" }\n },\n [\n _c(\"iframe\", {\n staticClass:\n \"flex-1 border border-gray-400 border-solid rounded-md\",\n attrs: { src: \"\" + _vm.shareableLink }\n })\n ]\n )\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"grid gap-8 md:grid-cols-12\" }, [\n _c(\n \"div\",\n { staticClass: \"col-span-8 mt-12 md:col-span-4\" },\n [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-12\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"col-span-12 md:col-span-8\",\n attrs: {\n label: _vm.$t(\"reports.expenses.date_range\"),\n error: _vm.dateRangeError\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.dateRange,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDateRange },\n model: {\n value: _vm.selectedRange,\n callback: function($$v) {\n _vm.selectedRange = $$v\n },\n expression: \"selectedRange\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 mt-6 md:gap-10 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"reports.expenses.from_date\"),\n error: _vm.fromDateError\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.from_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.from_date.$touch()\n }\n },\n model: {\n value: _vm.formData.from_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"from_date\", $$v)\n },\n expression: \"formData.from_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5 md:mt-0\",\n attrs: {\n label: _vm.$t(\"reports.expenses.to_date\"),\n error: _vm.toDateError\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.to_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.to_date.$touch()\n }\n },\n model: {\n value: _vm.formData.to_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"to_date\", $$v)\n },\n expression: \"formData.to_date\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"content-center hidden mt-0 w-md md:flex md:mt-8\",\n attrs: { variant: \"primary-outline\" },\n on: {\n click: function($event) {\n return _vm.getReports()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"reports.update_report\")) + \"\\n \"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"col-span-8 mt-0 md:mt-12\" }, [\n _c(\"iframe\", {\n staticClass:\n \"hidden w-full h-screen border-gray-100 border-solid rounded md:flex\",\n attrs: { src: _vm.getReportUrl }\n }),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass:\n \"flex items-center justify-center h-10 px-5 py-1 text-sm font-medium leading-none text-center text-white whitespace-nowrap rounded md:hidden bg-primary-500\",\n on: { click: _vm.viewReportsPDF }\n },\n [\n _c(\"document-text-icon\"),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"reports.view_pdf\")))])\n ],\n 1\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"grid gap-8 md:grid-cols-12\" }, [\n _c(\"div\", { staticClass: \"col-span-8 mt-12 md:col-span-4\" }, [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-12\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"col-span-12 md:col-span-8\",\n attrs: {\n label: _vm.$t(\"reports.profit_loss.date_range\"),\n error: _vm.dateRangeError\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.dateRange,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDateRange },\n model: {\n value: _vm.selectedRange,\n callback: function($$v) {\n _vm.selectedRange = $$v\n },\n expression: \"selectedRange\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 mt-6 md:gap-10 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"reports.profit_loss.from_date\"),\n error: _vm.fromDateError\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.from_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.from_date.$touch()\n }\n },\n model: {\n value: _vm.formData.from_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"from_date\", $$v)\n },\n expression: \"formData.from_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5 md:mt-0\",\n attrs: {\n label: _vm.$t(\"reports.profit_loss.to_date\"),\n error: _vm.toDateError\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.to_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.to_date.$touch()\n }\n },\n model: {\n value: _vm.formData.to_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"to_date\", $$v)\n },\n expression: \"formData.to_date\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-0 md:mt-8\" },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"content-center hidden text-sm w-md md:flex\",\n attrs: { variant: \"primary-outline\" },\n on: {\n click: function($event) {\n return _vm.getReports()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"reports.update_report\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"col-span-8 mt-0 md:mt-12\" }, [\n _c(\"iframe\", {\n staticClass:\n \"hidden w-full h-screen border-gray-100 border-solid rounded md:flex\",\n attrs: { src: _vm.getReportUrl }\n }),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass:\n \"flex items-center justify-center h-10 px-5 py-1 text-sm font-medium leading-none text-center text-white whitespace-nowrap rounded md:hidden bg-primary-500\",\n on: { click: _vm.viewReportsPDF }\n },\n [\n _c(\"document-text-icon\"),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"reports.view_pdf\")))])\n ],\n 1\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"grid gap-8 md:grid-cols-12\" }, [\n _c(\n \"div\",\n { staticClass: \"col-span-8 mt-12 md:col-span-4\" },\n [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-12\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"col-span-12 md:col-span-8\",\n attrs: {\n label: _vm.$t(\"reports.sales.date_range\"),\n error: _vm.dateRangeError\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.dateRange,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDateRange },\n model: {\n value: _vm.selectedRange,\n callback: function($$v) {\n _vm.selectedRange = $$v\n },\n expression: \"selectedRange\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 mt-6 md:gap-10 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"reports.sales.from_date\"),\n error: _vm.fromDateError\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.from_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.from_date.$touch()\n }\n },\n model: {\n value: _vm.formData.from_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"from_date\", $$v)\n },\n expression: \"formData.from_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5 md:mt-0\",\n attrs: {\n label: _vm.$t(\"reports.sales.to_date\"),\n error: _vm.toDateError\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.to_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.to_date.$touch()\n }\n },\n model: {\n value: _vm.formData.to_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"to_date\", $$v)\n },\n expression: \"formData.to_date\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-12 mt-6 md:mt-8\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"col-span-12 md:col-span-8\",\n attrs: { label: _vm.$t(\"reports.sales.report_type\") }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.reportTypes,\n \"allow-empty\": false,\n \"show-labels\": false,\n placeholder: _vm.$t(\"reports.sales.report_type\")\n },\n on: { input: _vm.getInitialReport },\n model: {\n value: _vm.selectedType,\n callback: function($$v) {\n _vm.selectedType = $$v\n },\n expression: \"selectedType\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"content-center hidden mt-0 w-md md:flex md:mt-8\",\n attrs: { variant: \"primary-outline\", type: \"submit\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.getReports()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"reports.update_report\")) + \"\\n \"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"col-span-8 mt-0 md:mt-12\" }, [\n _c(\"iframe\", {\n staticClass:\n \"hidden w-full h-screen border-gray-100 border-solid rounded md:flex\",\n attrs: { src: _vm.getReportUrl }\n }),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass:\n \"flex items-center justify-center h-10 px-5 py-1 text-sm font-medium leading-none text-center text-white whitespace-nowrap rounded md:hidden bg-primary-500\",\n on: { click: _vm.viewReportsPDF }\n },\n [\n _c(\"document-text-icon\"),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"reports.view_pdf\")))])\n ],\n 1\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"grid gap-8 md:grid-cols-12\" }, [\n _c(\n \"div\",\n { staticClass: \"col-span-8 mt-12 md:col-span-4\" },\n [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-12\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"col-span-12 md:col-span-8\",\n attrs: {\n label: _vm.$t(\"reports.taxes.date_range\"),\n error: _vm.dateRangeError\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n options: _vm.dateRange,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDateRange },\n model: {\n value: _vm.selectedRange,\n callback: function($$v) {\n _vm.selectedRange = $$v\n },\n expression: \"selectedRange\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 mt-6 md:gap-10 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"reports.taxes.from_date\"),\n error: _vm.fromDateError\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.from_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.from_date.$touch()\n }\n },\n model: {\n value: _vm.formData.from_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"from_date\", $$v)\n },\n expression: \"formData.from_date\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-5 md:mt-0\",\n attrs: {\n label: _vm.$t(\"reports.taxes.to_date\"),\n error: _vm.toDateError\n }\n },\n [\n _c(\"base-date-picker\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.to_date.$error,\n \"calendar-button\": true,\n \"calendar-button-icon\": \"calendar\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.to_date.$touch()\n }\n },\n model: {\n value: _vm.formData.to_date,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"to_date\", $$v)\n },\n expression: \"formData.to_date\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"content-center hidden mt-0 w-md md:flex md:mt-8\",\n attrs: { variant: \"primary-outline\" },\n on: {\n click: function($event) {\n return _vm.getReports()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"reports.update_report\")) + \"\\n \"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"col-span-8 mt-0 md:mt-12\" }, [\n _c(\"iframe\", {\n staticClass:\n \"hidden w-full h-screen border-gray-100 border-solid rounded md:flex\",\n attrs: { src: _vm.getReportUrl }\n }),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass:\n \"flex items-center justify-center h-10 px-5 py-1 text-sm font-medium leading-none text-center text-white whitespace-nowrap rounded md:hidden bg-primary-500\",\n on: { click: _vm.viewReportsPDF }\n },\n [\n _c(\"document-text-icon\"),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(_vm.$t(\"reports.view_pdf\")))])\n ],\n 1\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"base-page\",\n { staticClass: \"profit-loss-reports reports\" },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.$tc(\"reports.report\", 2) } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: { title: _vm.$t(\"general.home\"), to: \"/admin/dashboard\" }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$tc(\"reports.report\", 2),\n to: \"/admin/reports\",\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { size: \"lg\", variant: \"primary\" },\n on: {\n click: function($event) {\n return _vm.onDownload()\n }\n }\n },\n [\n _c(\"download-icon\", { staticClass: \"h-5 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"reports.download_pdf\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\" },\n [\n _c(\n \"sw-tabs\",\n [\n _c(\"sw-tab-item\", {\n attrs: {\n title: _vm.$t(\"reports.sales.sales\"),\n route: \"/admin/reports/sales\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-tab-item\", {\n attrs: {\n title: _vm.$t(\"reports.profit_loss.profit_loss\"),\n route: \"/admin/reports/profit-loss\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-tab-item\", {\n attrs: {\n title: _vm.$t(\"reports.expenses.expenses\"),\n route: \"/admin/reports/expenses\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-tab-item\", {\n attrs: {\n title: _vm.$t(\"reports.taxes.taxes\"),\n route: \"/admin/reports/taxes\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"transition\", { attrs: { name: \"fade\", mode: \"out-in\" } }, [\n _vm.activeTab === \"SALES\" || \"PROFIT_LOSS\" || \"EXPENSES\" || \"TAXES\"\n ? _c(\"div\", [_c(\"router-view\", { ref: \"report\" })], 1)\n : _vm._e()\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"relative setting-main-container backup\" },\n [\n _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\n \"div\",\n {\n staticClass: \"flex flex-wrap justify-between lg:flex-nowrap\",\n attrs: { slot: \"header\" },\n slot: \"header\"\n },\n [\n _c(\"div\", [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$tc(\"settings.backup.title\", 1)) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.backup.description\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-4 lg:mt-0 lg:ml-2\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { variant: \"primary-outline\", size: \"lg\" },\n on: { click: _vm.onCreateNewBackup }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.backup.new_backup\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid mb-8 md:grid-cols-3\" },\n [\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"settings.disk.select_disk\") } },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.getDisks,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\"settings.disk.select_disk\"),\n \"allow-empty\": false,\n \"track-by\": \"id\",\n label: \"name\",\n \"custom-label\": _vm.getCustomLabel\n },\n on: { select: _vm.refreshTable },\n model: {\n value: _vm.filters.selected_disk,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"selected_disk\", $$v)\n },\n expression: \"filters.selected_disk\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: {\n variant: \"gray\",\n \"show-filter\": false,\n data: _vm.fetchBackupsData\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: { label: _vm.$t(\"settings.backup.path\"), show: \"path\" },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.backup.path\")))\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(_vm._s(row.path))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n label: _vm.$t(\"settings.backup.created_at\"),\n show: \"created_at\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: { label: _vm.$t(\"settings.backup.size\"), show: \"size\" }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n data: _vm.fetchBackupsData,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.backup.action\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.onDownloadBckup(row)\n }\n }\n },\n [\n _c(\"cloud-download-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.download\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.onRemoveBackup(row)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n staticClass: \"relative h-full\",\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateCompanyData($event)\n }\n }\n },\n [\n _vm.isRequestOnGoing\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\"template\", { slot: \"header\" }, [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.company_info.company_info\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.company_info.section_description\")\n ) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.company_info.company_logo\")\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center justify-center h-24 p-5 mt-2 bg-transparent border-2 border-gray-200 border-dashed rounded-md image-upload-box\",\n attrs: { id: \"logo-box\" }\n },\n [\n _vm.previewLogo\n ? _c(\"img\", {\n staticClass: \"absolute opacity-100 preview-logo\",\n staticStyle: {\n \"max-height\": \"80%\",\n animation: \"fadeIn 2s ease\"\n },\n attrs: { src: _vm.previewLogo }\n })\n : _c(\n \"div\",\n { staticClass: \"flex flex-col items-center\" },\n [\n _c(\"cloud-upload-icon\", {\n staticClass:\n \"h-5 mb-2 text-xl leading-6 text-gray-400\"\n }),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"text-xs leading-4 text-center text-gray-400\"\n },\n [\n _vm._v(\n \"\\n Drag a file here or\\n \"\n ),\n _c(\n \"span\",\n {\n staticClass:\n \"cursor-pointer text-primary-500\",\n attrs: { id: \"pick-avatar\" }\n },\n [\n _vm._v(\n \"\\n browse\\n \"\n )\n ]\n ),\n _vm._v(\n \"\\n to choose a file\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"sw-avatar\", {\n attrs: {\n trigger: \"#logo-box\",\n \"preview-avatar\": _vm.previewLogo\n },\n on: {\n changed: _vm.onChange,\n uploadHandler: _vm.onUploadHandler,\n handleUploadError: _vm.onHandleUploadError\n },\n scopedSlots: _vm._u([\n {\n key: \"icon\",\n fn: function() {\n return [\n _c(\"cloud-upload-icon\", {\n staticClass:\n \"h-5 mb-2 text-xl leading-6 text-gray-400\"\n })\n ]\n },\n proxy: true\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid gap-6 sm:grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.company_info.company_name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.name.$error,\n placeholder: _vm.$t(\"settings.company_info.company_name\")\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$tc(\"settings.company_info.phone\") } },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n placeholder: _vm.$t(\"settings.company_info.phone\")\n },\n model: {\n value: _vm.formData.phone,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"phone\", $$v)\n },\n expression: \"formData.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.company_info.country\"),\n error: _vm.countryError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n class: { error: _vm.$v.formData.country_id.$error },\n attrs: {\n options: _vm.countries,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n placeholder: _vm.$t(\"general.select_country\"),\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.country,\n callback: function($$v) {\n _vm.country = $$v\n },\n expression: \"country\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$tc(\"settings.company_info.state\") } },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n placeholder: _vm.$tc(\"settings.company_info.state\"),\n name: \"state\",\n type: \"text\"\n },\n model: {\n value: _vm.formData.state,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"state\", $$v)\n },\n expression: \"formData.state\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$tc(\"settings.company_info.city\") } },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n placeholder: _vm.$tc(\"settings.company_info.city\"),\n name: \"city\",\n type: \"text\"\n },\n model: {\n value: _vm.formData.city,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"city\", $$v)\n },\n expression: \"formData.city\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$tc(\"settings.company_info.zip\") } },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n placeholder: _vm.$tc(\"settings.company_info.zip\")\n },\n model: {\n value: _vm.formData.zip,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"zip\", $$v)\n },\n expression: \"formData.zip\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.company_info.address\"),\n error: _vm.address1Error\n }\n },\n [\n _c(\"sw-textarea\", {\n class: {\n invalid: _vm.$v.formData.address_street_1.$error\n },\n attrs: {\n placeholder: _vm.$tc(\"general.street_1\"),\n rows: \"2\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.address_street_1.$touch()\n }\n },\n model: {\n value: _vm.formData.address_street_1,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"address_street_1\", $$v)\n },\n expression: \"formData.address_street_1\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"my-2\",\n attrs: { error: _vm.address2Error }\n },\n [\n _c(\"sw-textarea\", {\n class: {\n invalid: _vm.$v.formData.address_street_2.$error\n },\n attrs: {\n placeholder: _vm.$tc(\"general.street_2\"),\n rows: \"2\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.address_street_2.$touch()\n }\n },\n model: {\n value: _vm.formData.address_street_2,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"address_street_2\", $$v)\n },\n expression: \"formData.address_street_2\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$tc(\"settings.company_info.save\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 2\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\n \"div\",\n {\n staticClass: \"flex flex-wrap justify-between lg:flex-nowrap\",\n attrs: { slot: \"header\" },\n slot: \"header\"\n },\n [\n _c(\"div\", [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.menu_title.custom_fields\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.custom_fields.section_description\")\n ) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-4 lg:mt-0 lg:ml-2\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { variant: \"primary-outline\", size: \"lg\" },\n on: { click: _vm.addCustomField }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.custom_fields.add_custom_field\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: { variant: \"gray\", \"show-filter\": false, data: _vm.fetchData }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"settings.custom_fields.name\"),\n show: \"name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"settings.custom_fields.label\"),\n show: \"label\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"settings.custom_fields.model\"),\n show: \"model_type\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"settings.custom_fields.type\"),\n show: \"type.label\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n filterable: true,\n label: _vm.$t(\"settings.custom_fields.required\"),\n show: \"is_required\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.custom_fields.required\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n row.is_required ? \"YES\" : \"NO\"\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(\n row.is_required ? \"YES\" : \"NO\"\n ).color\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n row.is_required\n ? _vm.$t(\"settings.custom_fields.yes\")\n : _vm\n .$t(\"settings.custom_fields.no\")\n .replace(\"_\", \" \")\n ) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.tax_types.action\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.editCustomField(row.id)\n }\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeCustomField(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"relative\" },\n [\n _vm.isRequestOnGoing\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-card\",\n [\n _c(\n \"sw-tabs\",\n { staticClass: \"p-2\" },\n [\n _c(\n \"sw-tab-item\",\n {\n attrs: {\n title: _vm.$t(\"settings.customization.invoices.title\")\n }\n },\n [_c(\"invoices-tab\", { attrs: { settings: _vm.settings } })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-tab-item\",\n {\n attrs: {\n title: _vm.$t(\"settings.customization.estimates.title\")\n }\n },\n [_c(\"estimates-tab\", { attrs: { settings: _vm.settings } })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-tab-item\",\n {\n attrs: {\n title: _vm.$t(\"settings.customization.payments.title\")\n }\n },\n [_c(\"payments-tab\", { attrs: { settings: _vm.settings } })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-tab-item\",\n {\n attrs: { title: _vm.$t(\"settings.customization.items.title\") }\n },\n [_c(\"items-tab\")],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\n \"div\",\n {\n staticClass: \"flex flex-wrap justify-between lg:flex-nowrap\",\n attrs: { slot: \"header\" },\n slot: \"header\"\n },\n [\n _c(\"div\", [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.expense_category.title\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.expense_category.description\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-4 lg:mt-0 lg:ml-2\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { variant: \"primary-outline\", size: \"lg\" },\n on: { click: _vm.addExpenseCategory }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.expense_category.add_new_category\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: { \"show-filter\": false, data: _vm.fetchData, variant: \"gray\" }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n label: _vm.$t(\"settings.expense_category.category_name\"),\n show: \"name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$t(\"settings.expense_category.category_name\")\n ) + \"}\"\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(_vm._s(row.name))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n filterable: true,\n label: _vm.$t(\"settings.expense_category.category_description\")\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$t(\n \"settings.expense_category.category_description\"\n )\n )\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"w-48 overflow-hidden notes\" }, [\n _c(\n \"div\",\n {\n staticClass: \"overflow-hidden whitespace-nowrap\",\n staticStyle: { \"text-overflow\": \"ellipsis\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.description) +\n \"\\n \"\n )\n ]\n )\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.expense_category.action\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n staticClass: \"h-5\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.editExpenseCategory(row.id)\n }\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeExpenseCategory(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"setting-main-container backup\" },\n [\n _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\n \"div\",\n {\n staticClass: \"flex flex-wrap justify-between lg:flex-nowrap\",\n attrs: { slot: \"header\" },\n slot: \"header\"\n },\n [\n _c(\"div\", [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$tc(\"settings.disk.title\", 1)) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.disk.description\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-4 lg:mt-0 lg:ml-2\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { variant: \"primary-outline\", size: \"lg\" },\n on: { click: _vm.openCreateDiskModal }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.disk.new_disk\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n staticClass: \"mt-0 mb-3\",\n attrs: {\n variant: \"gray\",\n \"show-filter\": false,\n data: _vm.fetchData,\n \"table-class\": \"table tax-table\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n label: _vm.$t(\"settings.disk.disk_name\"),\n show: \"name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.disk.disk_name\")))\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(_vm._s(row.name))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n label: _vm.$t(\"settings.disk.filesystem_driver\"),\n show: \"driver\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n label: _vm.$t(\"settings.disk.disk_type\"),\n show: \"type\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n label: _vm.$t(\"settings.disk.is_default\")\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.disk.is_default\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n row.set_as_default ? \"YES\" : \"NO\"\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(\n row.set_as_default ? \"YES\" : \"NO\"\n ).color\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n row.set_as_default\n ? \"Yes\"\n : \"No\".replace(\"_\", \" \")\n ) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown no-click\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.disk.action\")))\n ]),\n _vm._v(\" \"),\n _vm.isShowAction(row)\n ? _c(\n \"sw-dropdown\",\n [\n _c(\n \"a\",\n {\n attrs: { slot: \"activator\", href: \"#\" },\n slot: \"activator\"\n },\n [_c(\"dot-icon\")],\n 1\n ),\n _vm._v(\" \"),\n !row.set_as_default\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.setDefaultDiskData(\n row.id\n )\n }\n }\n },\n [\n _c(\"check-circle-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.disk.set_default_disk\"\n )\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.type !== \"SYSTEM\"\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.openEditDiskModal(row)\n }\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n row.type !== \"SYSTEM\" && !row.set_as_default\n ? _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeDisk(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e()\n ]\n }\n }\n ])\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sw-divider\", { staticClass: \"mt-6 mb-4\" }),\n _vm._v(\" \"),\n _c(\"h3\", { staticClass: \"mb-5 text-lg font-medium text-black\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.disk.disk_settings\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-18px\" },\n on: { change: _vm.setDiskSettings },\n model: {\n value: _vm.save_pdf_to_disk,\n callback: function($$v) {\n _vm.save_pdf_to_disk = $$v\n },\n expression: \"save_pdf_to_disk\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n { staticClass: \"p-0 mb-1 text-base leading-snug text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.disk.save_pdf_to_disk\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"max-w-lg p-0 m-0 text-xs leading-tight text-gray-500\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.disk.disk_setting_description\")) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"relative\" },\n [\n _vm.isRequestOnGoing\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\"template\", { slot: \"header\" }, [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.mail.mail_config\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.mail.mail_config_desc\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _vm.mailConfigData\n ? _c(\n \"div\",\n [\n _c(\n _vm.mail_driver,\n {\n tag: \"component\",\n attrs: {\n \"config-data\": _vm.mailConfigData,\n loading: _vm.isLoading,\n \"mail-drivers\": _vm.mail_drivers\n },\n on: {\n \"on-change-driver\": function(val) {\n return (_vm.mail_driver = _vm.mailConfigData.mail_driver = val)\n },\n \"submit-data\": _vm.saveEmailConfig\n }\n },\n [\n _c(\n \"sw-button\",\n {\n staticClass: \"ml-2\",\n attrs: { variant: \"primary-outline\", type: \"button\" },\n on: { click: _vm.openMailTestModal }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.test_mail_conf\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\n \"div\",\n {\n staticClass: \"flex flex-wrap justify-between lg:flex-nowrap\",\n attrs: { slot: \"header\" },\n slot: \"header\"\n },\n [\n _c(\"div\", [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.customization.notes.title\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.customization.notes.description\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-4 lg:mt-0 lg:ml-2\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { size: \"lg\", variant: \"primary-outline\" },\n on: { click: _vm.openNoteSelectModal }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.customization.notes.add_note\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: { variant: \"gray\", \"show-filter\": false, data: _vm.fetchData }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n label: _vm.$t(\"settings.customization.notes.name\"),\n show: \"name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(_vm.$t(\"settings.customization.notes.name\"))\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(_vm._s(row.name))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n label: _vm.$t(\"settings.customization.notes.type\"),\n show: \"type\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(_vm.$t(\"settings.customization.notes.type\"))\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(_vm._s(row.type))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.tax_types.action\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n staticClass: \"h-5\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.editNote(row)\n }\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeNote(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"relative\" },\n [\n _vm.isRequestOnGoing\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\"template\", { slot: \"header\" }, [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.notification.title\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.notification.description\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.saveEmail()\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"grid-cols-2 col-span-1\" },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"my-2\",\n attrs: {\n label: _vm.$t(\"settings.notification.email\"),\n error: _vm.notificationEmailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.notification_email.$error,\n placeholder: _vm.$tc(\n \"settings.notification.please_enter_email\"\n ),\n type: \"text\",\n name: \"notification_email\",\n icon: \"envelope\"\n },\n on: {\n input: function($event) {\n return _vm.$v.notification_email.$touch()\n }\n },\n model: {\n value: _vm.notification_email,\n callback: function($$v) {\n _vm.notification_email =\n typeof $$v === \"string\" ? $$v.trim() : $$v\n },\n expression: \"notification_email\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"my-6\",\n attrs: {\n disabled: _vm.isLoading,\n loading: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$tc(\"settings.notification.save\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"sw-divider\", { staticClass: \"mt-1 mb-6\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex mt-3 mb-4\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-20px\" },\n on: { change: _vm.setInvoiceViewd },\n model: {\n value: _vm.notify_invoice_viewed,\n callback: function($$v) {\n _vm.notify_invoice_viewed = $$v\n },\n expression: \"notify_invoice_viewed\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n {\n staticClass:\n \"p-0 mb-1 text-base leading-snug text-black box-title\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.notification.invoice_viewed\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-tight text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.notification.invoice_viewed_desc\")\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex mb-2\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-20px\" },\n on: { change: _vm.setEstimateViewd },\n model: {\n value: _vm.notify_estimate_viewed,\n callback: function($$v) {\n _vm.notify_estimate_viewed = $$v\n },\n expression: \"notify_estimate_viewed\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n {\n staticClass:\n \"p-0 mb-1 text-base leading-snug text-black box-title\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.notification.estimate_viewed\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-tight text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.notification.estimate_viewed_desc\")\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n ],\n 2\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\n \"div\",\n {\n staticClass: \"flex flex-wrap justify-between lg:flex-nowrap\",\n attrs: { slot: \"header\" },\n slot: \"header\"\n },\n [\n _c(\"div\", [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.customization.payments.payment_modes\")\n ) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.customization.payments.description\")\n ) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-4 lg:mt-0 lg:ml-2\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { variant: \"primary-outline\", size: \"lg\" },\n on: { click: _vm.addPaymentMode }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.payments.add_payment_mode\"\n )\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: { variant: \"gray\", \"show-filter\": false, data: _vm.fetchData }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n label: _vm.$t(\"settings.customization.payments.mode_name\"),\n show: \"name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$t(\"settings.customization.payments.mode_name\")\n )\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(\" \" + _vm._s(row.name))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.tax_types.action\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n staticClass: \"h-5\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.editPaymentMode(row)\n }\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removePaymentMode(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n staticClass: \"relative\",\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updatePreferencesData($event)\n }\n }\n },\n [\n _vm.isRequestOnGoing\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\"template\", { slot: \"header\" }, [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.menu_title.preferences\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.preferences.general_settings\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid gap-6 sm:grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.preferences.currency\"),\n error: _vm.currencyError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n class: { error: _vm.$v.formData.currency.$error },\n attrs: {\n options: _vm.currencies,\n \"custom-label\": _vm.currencyNameWithCode,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n placeholder: _vm.$tc(\n \"settings.currencies.select_currency\"\n ),\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.formData.currency,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"currency\", $$v)\n },\n expression: \"formData.currency\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.preferences.default_language\"),\n error: _vm.languageError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n class: { error: _vm.$v.formData.language.$error },\n attrs: {\n options: _vm.languages,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n placeholder: _vm.$tc(\n \"settings.preferences.select_language\"\n ),\n label: \"name\",\n \"track-by\": \"code\"\n },\n model: {\n value: _vm.formData.language,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"language\", $$v)\n },\n expression: \"formData.language\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.preferences.time_zone\"),\n error: _vm.timeZoneError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n class: { error: _vm.$v.formData.timeZone.$error },\n attrs: {\n options: _vm.timeZones,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n placeholder: _vm.$tc(\n \"settings.preferences.select_time_zone\"\n ),\n label: \"key\",\n \"track-by\": \"key\"\n },\n model: {\n value: _vm.formData.timeZone,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"timeZone\", $$v)\n },\n expression: \"formData.timeZone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.preferences.date_format\"),\n error: _vm.dateFormatError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n class: { error: _vm.$v.formData.dateFormat.$error },\n attrs: {\n options: _vm.dateFormats,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n placeholder: _vm.$tc(\n \"settings.preferences.select_date_format\"\n ),\n label: \"display_date\"\n },\n model: {\n value: _vm.formData.dateFormat,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"dateFormat\", $$v)\n },\n expression: \"formData.dateFormat\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-2\",\n attrs: {\n label: _vm.$tc(\"settings.preferences.fiscal_year\"),\n error: _vm.fiscalYearError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n class: { error: _vm.$v.formData.fiscalYear.$error },\n attrs: {\n options: _vm.fiscalYears,\n \"show-labels\": false,\n \"allow-empty\": false,\n searchable: true,\n placeholder: _vm.$tc(\n \"settings.preferences.select_financial_year\"\n ),\n label: \"key\",\n \"track-by\": \"value\"\n },\n model: {\n value: _vm.formData.fiscalYear,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"fiscalYear\", $$v)\n },\n expression: \"formData.fiscalYear\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-6\",\n attrs: {\n variant: \"primary\",\n type: \"submit\",\n disabled: _vm.isLoading,\n loading: _vm.isLoading\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$tc(\"settings.company_info.save\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sw-divider\", { staticClass: \"mt-6 mb-8\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-18px\" },\n on: { change: _vm.setDiscount },\n model: {\n value: _vm.discount_per_item,\n callback: function($$v) {\n _vm.discount_per_item = $$v\n },\n expression: \"discount_per_item\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-15\" }, [\n _c(\n \"p\",\n { staticClass: \"p-0 mb-1 text-base leading-snug text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.preferences.discount_per_item\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-tight text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.preferences.discount_setting_description\"\n )\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n ],\n 2\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"base-page\", [\n _c(\n \"div\",\n { staticClass: \"pb-6\" },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.$tc(\"settings.setting\", 1) } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$t(\"general.home\"),\n to: \"/admin/dashboard\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n title: _vm.$tc(\"settings.setting\", 2),\n to: \"/admin/settings/user-profile\",\n active: \"\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"w-full mb-6 select-wrapper xl:hidden\" },\n [\n _c(\"sw-select\", {\n attrs: {\n options: _vm.menuItems,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n \"custom-label\": _vm.getCustomLabel\n },\n on: { input: _vm.navigateToSetting },\n model: {\n value: _vm.currentSetting,\n callback: function($$v) {\n _vm.currentSetting = $$v\n },\n expression: \"currentSetting\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"grid md:grid-cols-12\" }, [\n _c(\n \"div\",\n { staticClass: \"hidden col-span-3 mt-1 xl:block\" },\n [\n _c(\n \"sw-list\",\n _vm._l(_vm.menuItems, function(menuItem, index) {\n return _c(\n \"sw-list-item\",\n {\n key: index,\n staticClass: \"py-3\",\n attrs: {\n title: _vm.$t(menuItem.title),\n to: menuItem.link,\n active: _vm.hasActiveUrl(menuItem.link),\n \"tag-name\": \"router-link\"\n }\n },\n [\n _c(menuItem.icon, {\n tag: \"component\",\n staticClass: \"h-5\",\n attrs: { slot: \"icon\" },\n slot: \"icon\"\n })\n ],\n 1\n )\n }),\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-span-12 xl:col-span-9\" },\n [\n _c(\n \"transition\",\n { attrs: { name: \"fade\", mode: \"out-in\" } },\n [_c(\"router-view\")],\n 1\n )\n ],\n 1\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\n \"div\",\n {\n staticClass: \"flex flex-wrap justify-between lg:flex-nowrap\",\n attrs: { slot: \"header\" },\n slot: \"header\"\n },\n [\n _c(\"div\", [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.tax_types.title\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.tax_types.description\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-4 lg:mt-0 lg:ml-2\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { size: \"lg\", variant: \"primary-outline\" },\n on: { click: _vm.openTaxModal }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.tax_types.add_new_tax\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: {\n \"show-filter\": false,\n data: _vm.fetchData,\n \"table-class\": \"table\",\n variant: \"gray\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"settings.tax_types.tax_name\"),\n show: \"name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.tax_types.tax_name\")))\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(_vm._s(row.name))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n filterable: true,\n label: _vm.$t(\"settings.tax_types.compound_tax\")\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.tax_types.compound_tax\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-badge\",\n {\n attrs: {\n \"bg-color\": _vm.$utils.getBadgeStatusColor(\n row.compound_tax ? \"YES\" : \"NO\"\n ).bgColor,\n color: _vm.$utils.getBadgeStatusColor(\n row.compound_tax ? \"YES\" : \"NO\"\n ).color\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n row.compound_tax ? \"Yes\" : \"No\".replace(\"_\", \" \")\n ) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n filterable: true,\n label: _vm.$t(\"settings.tax_types.percent\")\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.tax_types.percent\")))\n ]),\n _vm._v(\"\\n \" + _vm._s(row.percent) + \" %\\n \")\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.tax_types.action\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.editTax(row.id)\n }\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeTax(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sw-divider\", { staticClass: \"my-8\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex mt-2\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-20px\" },\n on: { change: _vm.setTax },\n model: {\n value: _vm.formData.tax_per_item,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"tax_per_item\", $$v)\n },\n expression: \"formData.tax_per_item\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n {\n staticClass:\n \"p-0 mb-1 text-base leading-snug text-black box-title\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.tax_types.tax_per_item\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-4 text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.tax_types.tax_setting_description\")) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\"template\", { slot: \"header\" }, [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"settings.update_app.title\")) + \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.update_app.description\")) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"m-0\" },\n [\n _c(\n \"label\",\n { staticClass: \"text-sm not-italic font-medium input-label\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.update_app.current_version\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"box-border flex w-16 p-3 my-2 text-sm text-gray-500 bg-gray-200 border border-gray-200 border-solid rounded-md version\"\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.currentVersion) + \"\\n \")]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-6\",\n attrs: {\n loading: _vm.isCheckingforUpdate,\n disabled: _vm.isCheckingforUpdate || _vm.isUpdating,\n variant: \"primary-outline\"\n },\n on: { click: _vm.checkUpdate }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.update_app.check_update\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _vm.isUpdateAvailable\n ? _c(\"sw-divider\", { staticClass: \"mt-2 mb-4\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isUpdateAvailable\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isUpdating,\n expression: \"!isUpdating\"\n }\n ],\n staticClass: \"mt-4 content\"\n },\n [\n _c(\"h6\", { staticClass: \"mb-8 sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.update_app.avail_update\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass: \"text-sm not-italic font-medium input-label\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.update_app.next_version\")) +\n \" \"\n )\n ]\n ),\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"box-border flex w-16 p-3 my-2 text-sm text-gray-500 bg-gray-200 border border-gray-200 border-solid rounded-md version\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.updateData.version) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass:\n \"pl-5 mt-4 mb-8 text-sm leading-snug text-gray-500 update-description\",\n staticStyle: {\n \"white-space\": \"pre-wrap\",\n \"max-width\": \"480px\"\n },\n domProps: { innerHTML: _vm._s(_vm.description) }\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass: \"text-sm not-italic font-medium input-label\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.update_app.requirements\")) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"table\",\n {\n staticClass:\n \"w-1/2 mt-2 border-2 border-gray-200 table-fixed\"\n },\n _vm._l(_vm.requiredExtentions, function(ext, i) {\n return _c(\n \"tr\",\n { key: i, staticClass: \"p-2 border-2 border-gray-200\" },\n [\n _c(\n \"td\",\n {\n staticClass: \"p-2 text-sm truncate\",\n attrs: { width: \"70%\" }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(i) + \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n {\n staticClass: \"p-2 text-sm text-right\",\n attrs: { width: \"30%\" }\n },\n [\n ext\n ? _c(\"span\", {\n staticClass:\n \"inline-block w-4 h-4 ml-3 mr-2 rounded-full bg-success\"\n })\n : _c(\"span\", {\n staticClass:\n \"inline-block w-4 h-4 ml-3 mr-2 rounded-full bg-danger\"\n })\n ]\n )\n ]\n )\n }),\n 0\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-10\",\n attrs: { size: \"lg\", variant: \"primary\" },\n on: { click: _vm.onUpdateApp }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.update_app.update\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isUpdating\n ? _c(\n \"div\",\n { staticClass: \"relative flex justify-between mt-4 content\" },\n [\n _c(\"div\", [\n _c(\n \"h6\",\n { staticClass: \"m-0 mb-3 font-medium sw-section-title\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.update_app.update_progress\")\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mb-8 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.update_app.progress_text\")\n ) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"loading-icon\", {\n staticClass:\n \"absolute right-0 h-6 m-1 animate-spin text-primary-400\"\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isUpdating\n ? _c(\n \"ul\",\n { staticClass: \"w-full p-0 list-none\" },\n _vm._l(_vm.updateSteps, function(step) {\n return _c(\n \"li\",\n {\n staticClass:\n \"flex justify-between w-full py-3 border-b border-gray-200 border-solid last:border-b-0\"\n },\n [\n _c(\"p\", { staticClass: \"m-0 text-sm leading-8\" }, [\n _vm._v(_vm._s(_vm.$t(step.translationKey)))\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex flex-row items-center\" }, [\n step.time\n ? _c(\n \"span\",\n { staticClass: \"mr-3 text-xs text-gray-500\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(step.time) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass:\n \"block py-1 text-sm text-center uppercase rounded-full\",\n class: _vm.statusClass(step),\n staticStyle: { width: \"88px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.getStatus(step)) +\n \"\\n \"\n )\n ]\n )\n ])\n ]\n )\n }),\n 0\n )\n : _vm._e()\n ],\n 1\n )\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n staticClass: \"relative h-full\",\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateUserData($event)\n }\n }\n },\n [\n _vm.isRequestOnGoing\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"sw-card\",\n { attrs: { variant: \"setting-card\" } },\n [\n _c(\"template\", { slot: \"header\" }, [\n _c(\"h6\", { staticClass: \"sw-section-title\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.account_settings.account_settings\")) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"mt-2 text-sm leading-snug text-gray-500\",\n staticStyle: { \"max-width\": \"680px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"settings.account_settings.section_description\")\n ) +\n \"\\n \"\n )\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"grid mb-4 md:grid-cols-6\" }, [\n _c(\n \"div\",\n [\n _c(\n \"label\",\n {\n staticClass:\n \"text-sm not-italic font-medium leading-4 text-black whitespace-nowrap\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$tc(\"settings.account_settings.profile_picture\")\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"sw-avatar\", {\n attrs: {\n \"preview-avatar\": _vm.previewAvatar,\n label: _vm.$tc(\"general.choose_file\")\n },\n on: {\n changed: _vm.onChange,\n uploadHandler: _vm.onUploadHandler,\n handleUploadError: _vm.onHandleUploadError\n },\n scopedSlots: _vm._u([\n {\n key: \"icon\",\n fn: function() {\n return [\n _c(\"cloud-upload-icon\", {\n staticClass:\n \"h-5 mb-2 text-xl leading-6 text-gray-400\"\n })\n ]\n },\n proxy: true\n }\n ])\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid gap-6 sm:grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.account_settings.name\"),\n error: _vm.nameError\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.name.$error,\n placeholder: _vm.$t(\"settings.user_profile.name\")\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"name\", $$v)\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.account_settings.email\"),\n error: _vm.emailError\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.email.$error,\n placeholder: _vm.$t(\"settings.user_profile.email\")\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.email.$touch()\n }\n },\n model: {\n value: _vm.formData.email,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"email\", $$v)\n },\n expression: \"formData.email\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.account_settings.password\"),\n error: _vm.passwordError\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.password.$error,\n placeholder: _vm.$t(\"settings.user_profile.password\"),\n type: \"password\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.password.$touch()\n }\n },\n model: {\n value: _vm.formData.password,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"password\", $$v)\n },\n expression: \"formData.password\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-1 mb-2\",\n attrs: {\n label: _vm.$tc(\n \"settings.account_settings.confirm_password\"\n ),\n error: _vm.confirmPasswordError\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.confirm_password.$error,\n placeholder: _vm.$t(\n \"settings.user_profile.confirm_password\"\n ),\n type: \"password\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.confirm_password.$touch()\n }\n },\n model: {\n value: _vm.formData.confirm_password,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"confirm_password\", $$v)\n },\n expression: \"formData.confirm_password\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid gap-6 mt-4 sm:grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.language\"),\n error: _vm.languageError\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n class: { error: _vm.$v.language.$error },\n attrs: {\n options: _vm.languages,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false,\n placeholder: _vm.$tc(\n \"settings.preferences.select_language\"\n ),\n label: \"name\",\n \"track-by\": \"code\"\n },\n model: {\n value: _vm.language,\n callback: function($$v) {\n _vm.language = $$v\n },\n expression: \"language\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-6\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$tc(\"settings.account_settings.save\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 2\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\n \"form\",\n {\n staticClass: \"mt-6\",\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateEstimateSetting($event)\n }\n }\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\n \"settings.customization.estimates.estimate_prefix\"\n ),\n error: _vm.estimatePrefixError\n }\n },\n [\n _c(\"sw-input\", {\n staticStyle: { \"max-width\": \"30%\" },\n attrs: { invalid: _vm.$v.estimates.estimate_prefix.$error },\n on: {\n input: function($event) {\n return _vm.$v.estimates.estimate_prefix.$touch()\n },\n keyup: function($event) {\n return _vm.changeToUppercase(\"ESTIMATES\")\n }\n },\n model: {\n value: _vm.estimates.estimate_prefix,\n callback: function($$v) {\n _vm.$set(_vm.estimates, \"estimate_prefix\", $$v)\n },\n expression: \"estimates.estimate_prefix\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.estimates.default_estimate_email_body\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n attrs: { fields: _vm.mailFields },\n model: {\n value: _vm.estimates.estimate_mail_body,\n callback: function($$v) {\n _vm.$set(_vm.estimates, \"estimate_mail_body\", $$v)\n },\n expression: \"estimates.estimate_mail_body\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.estimates.company_address_format\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n attrs: { fields: _vm.companyFields },\n model: {\n value: _vm.estimates.company_address_format,\n callback: function($$v) {\n _vm.$set(_vm.estimates, \"company_address_format\", $$v)\n },\n expression: \"estimates.company_address_format\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.estimates.shipping_address_format\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n attrs: { fields: _vm.shippingFields },\n model: {\n value: _vm.estimates.shipping_address_format,\n callback: function($$v) {\n _vm.$set(_vm.estimates, \"shipping_address_format\", $$v)\n },\n expression: \"estimates.shipping_address_format\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.estimates.billing_address_format\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n attrs: { fields: _vm.billingFields },\n model: {\n value: _vm.estimates.billing_address_format,\n callback: function($$v) {\n _vm.$set(_vm.estimates, \"billing_address_format\", $$v)\n },\n expression: \"estimates.billing_address_format\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n disabled: _vm.isLoading,\n loading: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.customization.save\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sw-divider\", { staticClass: \"mt-6 mb-8\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex mt-3 mb-4\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-20px\" },\n on: { change: _vm.setEstimateSetting },\n model: {\n value: _vm.estimateAutogenerate,\n callback: function($$v) {\n _vm.estimateAutogenerate = $$v\n },\n expression: \"estimateAutogenerate\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n { staticClass: \"p-0 mb-1 text-base leading-snug text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.estimates.autogenerate_estimate_number\"\n )\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-tight text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.estimates.estimate_setting_description\"\n )\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex mb-2\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-20px\" },\n on: { change: _vm.setEstimateSetting },\n model: {\n value: _vm.estimateAsAttachment,\n callback: function($$v) {\n _vm.estimateAsAttachment = $$v\n },\n expression: \"estimateAsAttachment\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n { staticClass: \"p-0 mb-1 text-base leading-snug text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.estimates.estimate_email_attachment\"\n )\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-tight text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.estimates.estimate_email_attachment_setting_description\"\n )\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\n \"form\",\n {\n staticClass: \"mt-6\",\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateInvoiceSetting($event)\n }\n }\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.customization.invoices.invoice_prefix\"),\n error: _vm.invoicePrefixError\n }\n },\n [\n _c(\"sw-input\", {\n staticStyle: { \"max-width\": \"30%\" },\n attrs: { invalid: _vm.$v.invoices.invoice_prefix.$error },\n on: {\n input: function($event) {\n return _vm.$v.invoices.invoice_prefix.$touch()\n },\n keyup: function($event) {\n return _vm.changeToUppercase(\"INVOICES\")\n }\n },\n model: {\n value: _vm.invoices.invoice_prefix,\n callback: function($$v) {\n _vm.$set(_vm.invoices, \"invoice_prefix\", $$v)\n },\n expression: \"invoices.invoice_prefix\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.invoices.default_invoice_email_body\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n staticClass: \"mt-2\",\n attrs: { fields: _vm.InvoiceMailFields },\n model: {\n value: _vm.invoices.invoice_mail_body,\n callback: function($$v) {\n _vm.$set(_vm.invoices, \"invoice_mail_body\", $$v)\n },\n expression: \"invoices.invoice_mail_body\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.invoices.company_address_format\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n staticClass: \"mt-2\",\n attrs: { fields: _vm.companyFields },\n model: {\n value: _vm.invoices.company_address_format,\n callback: function($$v) {\n _vm.$set(_vm.invoices, \"company_address_format\", $$v)\n },\n expression: \"invoices.company_address_format\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.invoices.shipping_address_format\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n staticClass: \"mt-2\",\n attrs: { fields: _vm.shippingFields },\n model: {\n value: _vm.invoices.shipping_address_format,\n callback: function($$v) {\n _vm.$set(_vm.invoices, \"shipping_address_format\", $$v)\n },\n expression: \"invoices.shipping_address_format\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.invoices.billing_address_format\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n staticClass: \"mt-2\",\n attrs: { fields: _vm.billingFields },\n model: {\n value: _vm.invoices.billing_address_format,\n callback: function($$v) {\n _vm.$set(_vm.invoices, \"billing_address_format\", $$v)\n },\n expression: \"invoices.billing_address_format\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.customization.save\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sw-divider\", { staticClass: \"mt-6 mb-8\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex mt-3 mb-4\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-20px\" },\n on: { change: _vm.setInvoiceSetting },\n model: {\n value: _vm.invoiceAutogenerate,\n callback: function($$v) {\n _vm.invoiceAutogenerate = $$v\n },\n expression: \"invoiceAutogenerate\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n { staticClass: \"p-0 mb-1 text-base leading-snug text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.invoices.autogenerate_invoice_number\"\n )\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-tight text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.invoices.invoice_setting_description\"\n )\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex mb-2\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-20px\" },\n on: { change: _vm.setInvoiceSetting },\n model: {\n value: _vm.invoiceAsAttachment,\n callback: function($$v) {\n _vm.invoiceAsAttachment = $$v\n },\n expression: \"invoiceAsAttachment\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n { staticClass: \"p-0 mb-1 text-base leading-snug text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.invoices.invoice_email_attachment\"\n )\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-tight text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.invoices.invoice_email_attachment_setting_description\"\n )\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\n \"div\",\n { staticClass: \"flex flex-wrap justify-end mt-8 lg:flex-nowrap\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: { size: \"lg\", variant: \"primary-outline\" },\n on: { click: _vm.addItemUnit }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.customization.items.add_item_unit\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: { variant: \"gray\", data: _vm.fetchData, \"show-filter\": false }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"settings.customization.items.unit_name\"),\n show: \"name\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n _vm._s(_vm.$t(\"settings.customization.items.unit_name\"))\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"mt-6\" }, [\n _vm._v(_vm._s(row.name))\n ])\n ]\n }\n }\n ])\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"settings.tax_types.action\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n staticClass: \"h-5 mr-3 text-primary-800\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.editItemUnit(row)\n }\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeItemUnit(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\n \"form\",\n {\n staticClass: \"mt-6\",\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updatePaymentSetting($event)\n }\n }\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.customization.payments.payment_prefix\"),\n error: _vm.paymentPrefixError\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n staticStyle: { \"max-width\": \"30%\" },\n attrs: { invalid: _vm.$v.payments.payment_prefix.$error },\n on: {\n input: function($event) {\n return _vm.$v.payments.payment_prefix.$touch()\n },\n keyup: function($event) {\n return _vm.changeToUppercase(\"PAYMENTS\")\n }\n },\n model: {\n value: _vm.payments.payment_prefix,\n callback: function($$v) {\n _vm.$set(_vm.payments, \"payment_prefix\", $$v)\n },\n expression: \"payments.payment_prefix\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.payments.default_payment_email_body\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n attrs: { fields: _vm.mailFields },\n model: {\n value: _vm.payments.payment_mail_body,\n callback: function($$v) {\n _vm.$set(_vm.payments, \"payment_mail_body\", $$v)\n },\n expression: \"payments.payment_mail_body\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.payments.company_address_format\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n attrs: { fields: _vm.companyFields },\n model: {\n value: _vm.payments.company_address_format,\n callback: function($$v) {\n _vm.$set(_vm.payments, \"company_address_format\", $$v)\n },\n expression: \"payments.company_address_format\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-6 mb-4\",\n attrs: {\n label: _vm.$t(\n \"settings.customization.payments.from_customer_address_format\"\n )\n }\n },\n [\n _c(\"base-custom-input\", {\n attrs: { fields: _vm.customerAddressFields },\n model: {\n value: _vm.payments.from_customer_address_format,\n callback: function($$v) {\n _vm.$set(_vm.payments, \"from_customer_address_format\", $$v)\n },\n expression: \"payments.from_customer_address_format\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"my-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"settings.customization.save\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sw-divider\", { staticClass: \"mt-6 mb-8\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex mt-3 mb-4\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-20px\" },\n on: { change: _vm.setPaymentSetting },\n model: {\n value: _vm.paymentAutogenerate,\n callback: function($$v) {\n _vm.paymentAutogenerate = $$v\n },\n expression: \"paymentAutogenerate\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n { staticClass: \"p-0 mb-1 text-base leading-snug text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.payments.autogenerate_payment_number\"\n )\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-tight text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.payments.payment_setting_description\"\n )\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"flex mb-2\" }, [\n _c(\n \"div\",\n { staticClass: \"relative w-12\" },\n [\n _c(\"sw-switch\", {\n staticClass: \"absolute\",\n staticStyle: { top: \"-20px\" },\n on: { change: _vm.setPaymentSetting },\n model: {\n value: _vm.paymentAsAttachment,\n callback: function($$v) {\n _vm.paymentAsAttachment = $$v\n },\n expression: \"paymentAsAttachment\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"ml-4\" }, [\n _c(\n \"p\",\n { staticClass: \"p-0 mb-1 text-base leading-snug text-black\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.payments.payment_email_attachment\"\n )\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"p-0 m-0 text-xs leading-tight text-gray-500\",\n staticStyle: { \"max-width\": \"480px\" }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\n \"settings.customization.payments.payment_email_attachment_setting_description\"\n )\n ) +\n \"\\n \"\n )\n ]\n )\n ])\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.saveEmailConfig($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.driver\"),\n error: _vm.driverError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_driver.$error,\n options: _vm.mailDrivers,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.mailConfigData.mail_driver,\n callback: function($$v) {\n _vm.$set(_vm.mailConfigData, \"mail_driver\", $$v)\n },\n expression: \"mailConfigData.mail_driver\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.from_mail\"),\n error: _vm.fromEmailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.from_mail.$error,\n type: \"text\",\n name: \"from_mail\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_mail.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_mail,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_mail\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_mail\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.from_name\"),\n error: _vm.fromNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.from_name.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_name.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_name,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_name\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex mt-8\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n disabled: _vm.loading,\n loading: _vm.loading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n _c(\"save-icon\", { staticClass: \"mr-2\" }),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \")\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm._t(\"default\")\n ],\n 2\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.saveEmailConfig($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 sm:grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.driver\"),\n error: _vm.driverError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_driver.$error,\n options: _vm.mailDrivers,\n \"allow-empty\": false,\n searchable: true,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.mailConfigData.mail_driver,\n callback: function($$v) {\n _vm.$set(_vm.mailConfigData, \"mail_driver\", $$v)\n },\n expression: \"mailConfigData.mail_driver\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.mailgun_domain\"),\n error: _vm.domainError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_mailgun_domain.$error,\n type: \"text\",\n name: \"mailgun_domain\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_mailgun_domain.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_mailgun_domain,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_mailgun_domain\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_mailgun_domain\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.mailgun_secret\"),\n error: _vm.secretError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_mailgun_secret.$error,\n type: _vm.getInputType,\n name: \"mailgun_secret\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_mailgun_secret.$touch()\n }\n },\n scopedSlots: _vm._u([\n {\n key: \"rightIcon\",\n fn: function() {\n return [\n _vm.isShowPassword\n ? _c(\"eye-off-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n : _c(\"eye-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n ]\n },\n proxy: true\n }\n ]),\n model: {\n value: _vm.mailConfigData.mail_mailgun_secret,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_mailgun_secret\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_mailgun_secret\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.mailgun_endpoint\"),\n error: _vm.endpointError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_mailgun_endpoint.$error,\n type: \"text\",\n name: \"mailgun_endpoint\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_mailgun_endpoint.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_mailgun_endpoint,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_mailgun_endpoint\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_mailgun_endpoint\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.from_mail\"),\n error: _vm.fromEmailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.from_mail.$error,\n type: \"text\",\n name: \"from_mail\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_mail.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_mail,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_mail\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_mail\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.from_name\"),\n error: _vm.fromNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.from_name.$error,\n type: \"text\",\n name: \"from_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_name.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_name,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_name\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex my-10\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n disabled: _vm.loading,\n loading: _vm.loading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n _c(\"save-icon\", { staticClass: \"mr-2\" }),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \")\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm._t(\"default\")\n ],\n 2\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.saveEmailConfig($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 sm:grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.driver\"),\n error: _vm.driverError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_driver.$error,\n options: _vm.mailDrivers,\n \"allow-empty\": false,\n searchable: true,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.mailConfigData.mail_driver,\n callback: function($$v) {\n _vm.$set(_vm.mailConfigData, \"mail_driver\", $$v)\n },\n expression: \"mailConfigData.mail_driver\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.host\"),\n error: _vm.hostError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_host.$error,\n type: \"text\",\n name: \"mail_host\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_host.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_host,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_host\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_host\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.port\"),\n error: _vm.portError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_port.$error,\n type: \"text\",\n name: \"mail_port\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_port.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_port,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_port\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_port\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.encryption\"),\n error: _vm.encryptionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_encryption.$error,\n options: _vm.encryptions,\n searchable: true,\n \"show-labels\": false\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_encryption.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_encryption,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_encryption\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_encryption\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.from_mail\"),\n error: _vm.fromEmailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.from_mail.$error,\n type: \"text\",\n name: \"from_mail\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_mail.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_mail,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_mail\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_mail\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.from_name\"),\n error: _vm.fromNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.from_name.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_name.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_name,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.ses_key\"),\n error: _vm.keyError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_ses_key.$error,\n type: \"text\",\n name: \"mail_ses_key\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_ses_key.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_ses_key,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_ses_key\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_ses_key\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.ses_secret\"),\n error: _vm.secretError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_ses_secret.$error,\n type: _vm.getInputType,\n name: \"mail_ses_secret\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_ses_secret.$touch()\n }\n },\n scopedSlots: _vm._u([\n {\n key: \"rightIcon\",\n fn: function() {\n return [\n _vm.isShowPassword\n ? _c(\"eye-off-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n : _c(\"eye-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n ]\n },\n proxy: true\n }\n ]),\n model: {\n value: _vm.mailConfigData.mail_ses_secret,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_ses_secret\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_ses_secret\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex my-10\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n disabled: _vm.loading,\n loading: _vm.loading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n _c(\"save-icon\", { staticClass: \"mr-2\" }),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \")\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm._t(\"default\")\n ],\n 2\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.saveEmailConfig($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"grid gap-6 grid-col-1 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.driver\"),\n error: _vm.driverError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_driver.$error,\n options: _vm.mailDrivers,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.mailConfigData.mail_driver,\n callback: function($$v) {\n _vm.$set(_vm.mailConfigData, \"mail_driver\", $$v)\n },\n expression: \"mailConfigData.mail_driver\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.host\"),\n error: _vm.hostError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_host.$error,\n type: \"text\",\n name: \"mail_host\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_host.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_host,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_host\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_host\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.username\"),\n error: _vm.usernameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_username.$error,\n type: \"text\",\n name: \"db_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_username.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_username,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_username\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_username\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.password\"),\n error: _vm.passwordError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_password.$error,\n type: _vm.getInputType,\n name: \"password\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_password.$touch()\n }\n },\n scopedSlots: _vm._u([\n {\n key: \"rightIcon\",\n fn: function() {\n return [\n _vm.isShowPassword\n ? _c(\"eye-off-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n : _c(\"eye-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n ]\n },\n proxy: true\n }\n ]),\n model: {\n value: _vm.mailConfigData.mail_password,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_password\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_password\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.port\"),\n error: _vm.portError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_port.$error,\n type: \"text\",\n name: \"mail_port\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_port.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_port,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_port\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_port\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.encryption\"),\n error: _vm.encryptionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_encryption.$error,\n options: _vm.encryptions,\n searchable: true,\n \"show-labels\": false\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_encryption.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_encryption,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_encryption\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_encryption\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.from_mail\"),\n error: _vm.fromEmailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.from_mail.$error,\n type: \"text\",\n name: \"from_mail\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_mail.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_mail,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_mail\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_mail\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.mail.from_name\"),\n error: _vm.fromNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.mailConfigData.from_name.$error,\n type: \"text\",\n name: \"from_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_name.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_name,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_name\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"flex my-10\" },\n [\n _c(\n \"sw-button\",\n {\n attrs: {\n disabled: _vm.loading,\n loading: _vm.loading,\n type: \"submit\",\n variant: \"primary\"\n }\n },\n [\n _c(\"save-icon\", { staticClass: \"mr-2\" }),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \")\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm._t(\"default\")\n ],\n 2\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.isSuperAdmin\n ? _c(\n \"base-page\",\n { staticClass: \"item-create\" },\n [\n _c(\n \"sw-page-header\",\n { staticClass: \"mb-3\", attrs: { title: _vm.pageTitle } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"/admin/dashboard\",\n title: _vm.$t(\"general.home\")\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"/admin/users\",\n title: _vm.$tc(\"users.user\", 2)\n }\n }),\n _vm._v(\" \"),\n _vm.$route.name === \"users.edit\"\n ? _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"#\",\n title: _vm.$t(\"users.edit_user\"),\n active: \"\"\n }\n })\n : _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"#\",\n title: _vm.$t(\"users.new_user\"),\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"template\", { slot: \"actions\" })\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"grid grid-cols-12\" }, [\n _c(\"div\", { staticClass: \"col-span-12 md:col-span-8\" }, [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.submitUser($event)\n }\n }\n },\n [\n _c(\n \"sw-card\",\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mb-4\",\n attrs: {\n label: _vm.$t(\"users.name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.name.$error,\n focus: \"\",\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.name.$touch()\n }\n },\n model: {\n value: _vm.formData.name,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$t(\"users.email\"),\n error: _vm.emailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.formData.email.$error,\n type: \"text\",\n name: \"email\",\n \"tab-index\": \"3\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.email.$touch()\n }\n },\n model: {\n value: _vm.formData.email,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"email\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.email\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: {\n label: _vm.$tc(\"users.password\"),\n error: _vm.passwordError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n invalid: _vm.$v.formData.password.$error,\n type: \"password\"\n },\n on: {\n input: function($event) {\n return _vm.$v.formData.password.$touch()\n }\n },\n model: {\n value: _vm.formData.password,\n callback: function($$v) {\n _vm.$set(_vm.formData, \"password\", $$v)\n },\n expression: \"formData.password\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4 mb-6\",\n attrs: { label: _vm.$t(\"users.phone\") }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n type: \"text\",\n name: \"phone\",\n \"tab-index\": \"4\"\n },\n model: {\n value: _vm.formData.phone,\n callback: function($$v) {\n _vm.$set(\n _vm.formData,\n \"phone\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"formData.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mt-6 mb-4\" },\n [\n _c(\n \"sw-button\",\n {\n staticClass:\n \"flex justify-center w-full md:w-auto\",\n attrs: {\n loading: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\",\n size: \"lg\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2 -ml-1\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isEdit\n ? _vm.$t(\"users.update_user\")\n : _vm.$t(\"users.save_user\")\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n ])\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.isSuperAdmin\n ? _c(\n \"base-page\",\n { staticClass: \"items\" },\n [\n _c(\n \"sw-page-header\",\n { attrs: { title: _vm.$t(\"users.title\") } },\n [\n _c(\n \"sw-breadcrumb\",\n { attrs: { slot: \"breadcrumbs\" }, slot: \"breadcrumbs\" },\n [\n _c(\"sw-breadcrumb-item\", {\n attrs: { to: \"dashboard\", title: _vm.$t(\"general.home\") }\n }),\n _vm._v(\" \"),\n _c(\"sw-breadcrumb-item\", {\n attrs: {\n to: \"#\",\n title: _vm.$tc(\"users.title\", 2),\n active: \"\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"template\",\n { slot: \"actions\" },\n [\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.totalUsers,\n expression: \"totalUsers\"\n }\n ],\n attrs: { variant: \"primary-outline\", size: \"lg\" },\n on: { click: _vm.toggleFilter }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.filter\")) +\n \"\\n \"\n ),\n _c(_vm.filterIcon, {\n tag: \"component\",\n staticClass: \"w-4 h-4 ml-2 -mr-1\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"ml-4\",\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"users/create\",\n variant: \"primary\",\n size: \"lg\"\n }\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"users.add_user\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"slide-y-up-transition\",\n [\n _c(\n \"sw-filter-wrapper\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showFilters,\n expression: \"showFilters\"\n }\n ],\n staticClass: \"mt-3\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 mr-4\",\n attrs: { label: _vm.$tc(\"users.name\") }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n type: \"text\",\n name: \"name\",\n autocomplete: \"off\"\n },\n model: {\n value: _vm.filters.name,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"name\", $$v)\n },\n expression: \"filters.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2 mr-4\",\n attrs: { label: _vm.$tc(\"users.email\") }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n type: \"text\",\n name: \"email\",\n autocomplete: \"off\"\n },\n model: {\n value: _vm.filters.email,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"email\", $$v)\n },\n expression: \"filters.email\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"flex-1 mt-2\",\n attrs: { label: _vm.$tc(\"users.phone\") }\n },\n [\n _c(\"sw-input\", {\n staticClass: \"mt-2\",\n attrs: {\n type: \"text\",\n name: \"phone\",\n autocomplete: \"off\"\n },\n model: {\n value: _vm.filters.phone,\n callback: function($$v) {\n _vm.$set(_vm.filters, \"phone\", $$v)\n },\n expression: \"filters.phone\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"label\",\n {\n staticClass:\n \"absolute text-sm leading-snug text-gray-900 cursor-pointer\",\n staticStyle: { top: \"10px\", right: \"15px\" },\n on: { click: _vm.clearFilter }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.clear_all\")))]\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-empty-table-placeholder\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showEmptyScreen,\n expression: \"showEmptyScreen\"\n }\n ],\n attrs: {\n title: _vm.$t(\"users.no_users\"),\n description: _vm.$t(\"users.list_of_users\")\n }\n },\n [\n _c(\"astronaut-icon\", { staticClass: \"mt-5 mb-4\" }),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n attrs: {\n slot: \"actions\",\n \"tag-name\": \"router-link\",\n to: \"/admin/users/create\",\n size: \"lg\",\n variant: \"primary-outline\"\n },\n slot: \"actions\"\n },\n [\n _c(\"plus-icon\", { staticClass: \"w-6 h-6 mr-1 -ml-2\" }),\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"users.add_user\")) + \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showEmptyScreen,\n expression: \"!showEmptyScreen\"\n }\n ],\n staticClass: \"relative table-container\"\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center justify-between h-10 mt-5 list-none border-b-2 border-gray-200 border-solid\"\n },\n [\n _c(\"p\", { staticClass: \"text-sm\" }, [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"general.showing\")) + \": \"\n ),\n _c(\"b\", [_vm._v(_vm._s(_vm.users.length))]),\n _vm._v(\n \"\\n\\n \" +\n _vm._s(_vm.$t(\"general.of\")) +\n \"\\n\\n \"\n ),\n _c(\"b\", [_vm._v(_vm._s(_vm.totalUsers))])\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-transition\",\n { attrs: { type: \"fade\" } },\n [\n _vm.selectedUsers.length\n ? _c(\n \"sw-dropdown\",\n [\n _c(\n \"span\",\n {\n staticClass:\n \"flex block text-sm font-medium cursor-pointer select-none text-primary-400\",\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.actions\")) +\n \"\\n \"\n ),\n _c(\"chevron-down-icon\", {\n staticClass: \"h-5\"\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n { on: { click: _vm.removeMultipleUsers } },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"absolute z-10 items-center pl-4 mt-2 select-none md:mt-12\"\n },\n [\n _c(\"sw-checkbox\", {\n staticClass: \"hidden md:inline\",\n attrs: { variant: \"primary\", size: \"sm\" },\n on: { change: _vm.selectAllUsers },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-checkbox\", {\n staticClass: \"md:hidden\",\n attrs: {\n label: _vm.$t(\"general.select_all\"),\n variant: \"primary\",\n size: \"sm\"\n },\n on: { change: _vm.selectAllUsers },\n model: {\n value: _vm.selectAllFieldStatus,\n callback: function($$v) {\n _vm.selectAllFieldStatus = $$v\n },\n expression: \"selectAllFieldStatus\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-table-component\",\n {\n ref: \"table\",\n attrs: {\n data: _vm.fetchData,\n \"show-filter\": false,\n \"table-class\": \"table\"\n }\n },\n [\n _c(\"sw-table-column\", {\n attrs: {\n sortable: false,\n filterable: false,\n \"cell-class\": \"no-click\"\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"default\",\n fn: function(row) {\n return _c(\n \"div\",\n { staticClass: \"custom-control custom-checkbox\" },\n [\n _c(\"sw-checkbox\", {\n attrs: {\n id: row.id,\n value: row.id,\n variant: \"primary\",\n size: \"sm\"\n },\n model: {\n value: _vm.selectField,\n callback: function($$v) {\n _vm.selectField = $$v\n },\n expression: \"selectField\"\n }\n })\n ],\n 1\n )\n }\n }\n ],\n null,\n false,\n 3150036800\n )\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"users.name\"),\n show: \"name\"\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"users.name\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"router-link\",\n {\n staticClass: \"font-medium text-primary-500\",\n attrs: {\n to: { path: \"users/\" + row.id + \"/edit\" }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(row.name) +\n \"\\n \"\n )\n ]\n )\n ]\n }\n }\n ],\n null,\n false,\n 2266017303\n )\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"users.email\"),\n show: \"email\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"users.phone\"),\n show: \"phone\"\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.$t(\"users.phone\")))\n ]),\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(\n _vm._s(row.phone ? row.phone : \"No Contact\") +\n \" \"\n )\n ])\n ]\n }\n }\n ],\n null,\n false,\n 3015326942\n )\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n label: _vm.$t(\"users.added_on\"),\n \"sort-as\": \"created_at\",\n show: \"formattedCreatedAt\"\n }\n }),\n _vm._v(\" \"),\n _c(\"sw-table-column\", {\n attrs: {\n sortable: true,\n filterable: false,\n \"cell-class\": \"action-dropdown\"\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"default\",\n fn: function(row) {\n return [\n _c(\"span\", [\n _vm._v(\n \" \" + _vm._s(_vm.$t(\"users.action\")) + \" \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown\",\n [\n _c(\"dot-icon\", {\n attrs: { slot: \"activator\" },\n slot: \"activator\"\n }),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n attrs: {\n \"tag-name\": \"router-link\",\n to: \"users/\" + row.id + \"/edit\"\n }\n },\n [\n _c(\"pencil-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.edit\")) +\n \"\\n \"\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-dropdown-item\",\n {\n on: {\n click: function($event) {\n return _vm.removeUser(row.id)\n }\n }\n },\n [\n _c(\"trash-icon\", {\n staticClass: \"h-5 mr-3 text-gray-600\"\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"general.delete\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ],\n null,\n false,\n 2310025438\n )\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass:\n \"flex flex-col items-center justify-between w-full h-32 pt-10 step-indicator\"\n },\n [\n _c(\"img\", {\n staticClass: \"h-12\",\n attrs: {\n id: \"logo-crater\",\n src: \"/assets/img/crater-logo.png\",\n alt: \"Crater Logo\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"sw-wizard\",\n {\n attrs: {\n steps: 7,\n currentStep: _vm.step,\n \"allow-navigation-redirect\": false\n },\n on: {\n \"update:currentStep\": function($event) {\n _vm.step = $event\n },\n \"update:current-step\": function($event) {\n _vm.step = $event\n }\n }\n },\n [_c(_vm.tab, { tag: \"component\", on: { next: _vm.setTab } })],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-wizard-step\",\n {\n attrs: {\n title: _vm.$t(\"wizard.company_info\"),\n description: _vm.$t(\"wizard.company_info_desc\")\n }\n },\n [\n _vm.isFetching\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.next()\n }\n }\n },\n [\n _c(\n \"div\",\n [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 mb-4 md:grid-cols-2 md:mb-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.company_info.company_logo\")\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"relative flex items-center justify-center h-24 p-5 mt-2 bg-transparent border-2 border-gray-200 border-dashed rounded-md image-upload-box\",\n attrs: { id: \"logo-box\" }\n },\n [\n _vm.previewLogo\n ? _c(\"img\", {\n staticClass:\n \"absolute opacity-100 preview-logo\",\n staticStyle: {\n \"max-height\": \"80%\",\n animation: \"fadeIn 2s ease\"\n },\n attrs: { src: _vm.previewLogo }\n })\n : _c(\n \"div\",\n { staticClass: \"flex flex-col items-center\" },\n [\n _c(\"cloud-upload-icon\", {\n staticClass:\n \"h-5 mb-2 text-xl leading-6 text-gray-400\"\n }),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"text-xs leading-4 text-center text-gray-400\"\n },\n [\n _vm._v(\n \"\\n Drag a file here or\\n \"\n ),\n _c(\n \"span\",\n {\n staticClass:\n \"cursor-pointer text-primary-500\",\n attrs: { id: \"pick-avatar\" }\n },\n [_vm._v(\"browse\")]\n ),\n _vm._v(\n \"\\n to choose a file\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"sw-avatar\", {\n attrs: {\n trigger: \"#logo-box\",\n \"preview-avatar\": _vm.previewLogo\n },\n on: {\n changed: _vm.onChange,\n uploadHandler: _vm.onUploadHandler,\n handleUploadError: _vm.onHandleUploadError\n },\n scopedSlots: _vm._u([\n {\n key: \"icon\",\n fn: function() {\n return [\n _c(\"cloud-upload-icon\", {\n staticClass:\n \"h-5 mb-2 text-xl leading-6 text-gray-400\"\n })\n ]\n },\n proxy: true\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.company_name\"),\n error: _vm.companyNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.companyData.name.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.companyData.name.$touch()\n }\n },\n model: {\n value: _vm.companyData.name,\n callback: function($$v) {\n _vm.$set(\n _vm.companyData,\n \"name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"companyData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.country\"),\n error: _vm.countryError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n class: { error: _vm.$v.companyData.country_id.$error },\n attrs: {\n options: _vm.countries,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false,\n placeholder: _vm.$t(\"general.select_country\"),\n \"track-by\": \"id\",\n label: \"name\"\n },\n model: {\n value: _vm.country,\n callback: function($$v) {\n _vm.country = $$v\n },\n expression: \"country\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"wizard.state\") } },\n [\n _c(\"sw-input\", {\n attrs: { name: \"state\", type: \"text\" },\n model: {\n value: _vm.companyData.state,\n callback: function($$v) {\n _vm.$set(_vm.companyData, \"state\", $$v)\n },\n expression: \"companyData.state\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"wizard.city\") } },\n [\n _c(\"sw-input\", {\n attrs: { name: \"city\", type: \"text\" },\n model: {\n value: _vm.companyData.city,\n callback: function($$v) {\n _vm.$set(_vm.companyData, \"city\", $$v)\n },\n expression: \"companyData.city\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"div\",\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.address\"),\n error: _vm.address1Error\n }\n },\n [\n _c(\"sw-textarea\", {\n attrs: {\n invalid:\n _vm.$v.companyData.address_street_1.$error,\n placeholder: _vm.$t(\"general.street_1\"),\n name: \"billing_street1\",\n rows: \"2\"\n },\n on: {\n input: function($event) {\n return _vm.$v.companyData.address_street_1.$touch()\n }\n },\n model: {\n value: _vm.companyData.address_street_1,\n callback: function($$v) {\n _vm.$set(\n _vm.companyData,\n \"address_street_1\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"companyData.address_street_1\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-1 lg:mt-2 md:mt-2\",\n attrs: { error: _vm.address2Error }\n },\n [\n _c(\"sw-textarea\", {\n attrs: {\n invalid:\n _vm.$v.companyData.address_street_2.$error,\n placeholder: _vm.$t(\"general.street_2\"),\n name: \"billing_street2\",\n rows: \"2\"\n },\n on: {\n input: function($event) {\n return _vm.$v.companyData.address_street_2.$touch()\n }\n },\n model: {\n value: _vm.companyData.address_street_2,\n callback: function($$v) {\n _vm.$set(\n _vm.companyData,\n \"address_street_2\",\n $$v\n )\n },\n expression: \"companyData.address_street_2\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n [\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"wizard.zip_code\") } },\n [\n _c(\"sw-input\", {\n attrs: { type: \"text\", name: \"zip\" },\n model: {\n value: _vm.companyData.zip,\n callback: function($$v) {\n _vm.$set(\n _vm.companyData,\n \"zip\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"companyData.zip\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n staticClass: \"mt-4\",\n attrs: { label: _vm.$t(\"wizard.phone\") }\n },\n [\n _c(\"sw-input\", {\n attrs: { type: \"text\", name: \"phone\" },\n model: {\n value: _vm.companyData.phone,\n callback: function($$v) {\n _vm.$set(\n _vm.companyData,\n \"phone\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"companyData.phone\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"wizard.save_cont\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-wizard-step\",\n {\n attrs: {\n title: _vm.$t(\"wizard.database.database\"),\n description: _vm.$t(\"wizard.database.desc\")\n }\n },\n [\n _vm.isFetching\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.database_connection, {\n tag: \"component\",\n attrs: {\n \"config-data\": _vm.databaseData,\n \"is-loading\": _vm.isLoading,\n \"is-fetching\": _vm.isFetching\n },\n on: {\n \"on-change-driver\": _vm.getDatabaseConfig,\n \"submit-data\": _vm.next\n }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-wizard-step\",\n {\n attrs: {\n title: _vm.$t(\"wizard.mail.mail_config\"),\n description: _vm.$t(\"wizard.mail.mail_config_desc\")\n }\n },\n [\n _vm.isFetching\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.next()\n }\n }\n },\n [\n _c(_vm.mail_driver, {\n tag: \"component\",\n attrs: {\n \"config-data\": _vm.mailConfigData,\n loading: _vm.isLoading,\n \"mail-drivers\": _vm.mail_drivers\n },\n on: {\n \"on-change-driver\": function(val) {\n return (_vm.mail_driver = _vm.mailConfigData.mail_driver = val)\n },\n \"submit-data\": _vm.next\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-wizard-step\",\n {\n attrs: {\n title: _vm.$t(\"wizard.permissions.permissions\"),\n description: _vm.$t(\"wizard.permissions.permission_desc\")\n }\n },\n [\n _vm.isFetching\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"relative\" },\n [\n _vm._l(_vm.permissions, function(permission, index) {\n return _c(\n \"div\",\n { key: index, staticClass: \"border border-gray-200\" },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-flow-row grid-cols-3 lg:gap-24 sm:gap-4\"\n },\n [\n _c(\"div\", { staticClass: \"col-span-2 p-3\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(permission.folder) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"p-3 text-right\" }, [\n permission.isSet\n ? _c(\"span\", {\n staticClass:\n \"inline-block w-4 h-4 ml-3 mr-2 rounded-full bg-success\"\n })\n : _c(\"span\", {\n staticClass:\n \"inline-block w-4 h-4 ml-3 mr-2 rounded-full bg-danger\"\n }),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(permission.permission))])\n ])\n ]\n )\n ]\n )\n }),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isFetching,\n expression: \"!isFetching\"\n }\n ],\n staticClass: \"mt-10\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\"\n },\n on: { click: _vm.next }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"wizard.continue\")) + \"\\n \"\n ),\n _c(\"arrow-right-icon\", { staticClass: \"h-5 ml-2 -mr-1\" })\n ],\n 1\n )\n ],\n 2\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-wizard-step\",\n {\n attrs: {\n title: _vm.$t(\"wizard.preferences\"),\n description: _vm.$t(\"wizard.preferences_desc\")\n }\n },\n [\n _vm.isFetching\n ? _c(\"base-loader\", { attrs: { \"show-bg-overlay\": true } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.next($event)\n }\n }\n },\n [\n _c(\n \"div\",\n [\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.currency\"),\n error: _vm.currencyError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n class: { error: _vm.$v.settingData.currency.$error },\n attrs: {\n options: _vm.currencies,\n \"custom-label\": _vm.currencyNameWithCode,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\n \"settings.currencies.select_currency\"\n ),\n \"track-by\": \"id\",\n label: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.settingData.currency.$touch()\n }\n },\n model: {\n value: _vm.settingData.currency,\n callback: function($$v) {\n _vm.$set(_vm.settingData, \"currency\", $$v)\n },\n expression: \"settingData.currency\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"settings.preferences.default_language\"),\n error: _vm.languageError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n class: { error: _vm.$v.settingData.language.$error },\n attrs: {\n options: _vm.languages,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\n \"settings.preferences.select_language\"\n ),\n label: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.settingData.language.$touch()\n }\n },\n model: {\n value: _vm.settingData.language,\n callback: function($$v) {\n _vm.$set(_vm.settingData, \"language\", $$v)\n },\n expression: \"settingData.language\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.date_format\"),\n error: _vm.dateFormatError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n class: { error: _vm.$v.settingData.dateFormat.$error },\n attrs: {\n options: _vm.dateFormats,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\n \"settings.preferences.select_date_format\"\n ),\n label: \"display_date\"\n },\n on: {\n input: function($event) {\n return _vm.$v.settingData.dateFormat.$touch()\n }\n },\n model: {\n value: _vm.settingData.dateFormat,\n callback: function($$v) {\n _vm.$set(_vm.settingData, \"dateFormat\", $$v)\n },\n expression: \"settingData.dateFormat\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.time_zone\"),\n error: _vm.timeZoneError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n class: { error: _vm.$v.settingData.timeZone.$error },\n attrs: {\n options: _vm.timeZones,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\n \"settings.preferences.select_time_zone\"\n ),\n label: \"key\"\n },\n on: {\n input: function($event) {\n return _vm.$v.settingData.timeZone.$touch()\n }\n },\n model: {\n value: _vm.settingData.timeZone,\n callback: function($$v) {\n _vm.$set(_vm.settingData, \"timeZone\", $$v)\n },\n expression: \"settingData.timeZone\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.fiscal_year\"),\n error: _vm.fiscalYearError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n class: { error: _vm.$v.settingData.fiscalYear.$error },\n attrs: {\n options: _vm.fiscalYears,\n searchable: true,\n \"show-labels\": false,\n placeholder: _vm.$t(\n \"settings.preferences.select_financial_year\"\n ),\n label: \"key\"\n },\n on: {\n input: function($event) {\n return _vm.$v.settingData.fiscalYear.$touch()\n }\n },\n model: {\n value: _vm.settingData.fiscalYear,\n callback: function($$v) {\n _vm.$set(_vm.settingData, \"fiscalYear\", $$v)\n },\n expression: \"settingData.fiscalYear\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"wizard.save_cont\")) +\n \"\\n \"\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-wizard-step\",\n {\n attrs: {\n title: _vm.$t(\"wizard.req.system_req\"),\n description: _vm.$t(\"wizard.req.system_req_desc\")\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"w-full md:w-2/3\" },\n [\n _c(\"div\", { staticClass: \"mb-6\" }, [\n _vm.phpSupportInfo\n ? _c(\n \"div\",\n {\n staticClass:\n \"grid grid-flow-row grid-cols-3 p-3 border border-gray-200 lg:gap-24 sm:gap-4\"\n },\n [\n _c(\"div\", { staticClass: \"col-span-2 text-sm\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$t(\"wizard.req.php_req_version\", {\n version: _vm.phpSupportInfo.minimum\n })\n ) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"text-right\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.phpSupportInfo.current) +\n \"\\n \"\n ),\n _vm.phpSupportInfo.supported\n ? _c(\"span\", {\n staticClass:\n \"inline-block w-4 h-4 ml-3 mr-2 rounded-full bg-success\"\n })\n : _c(\"span\", {\n staticClass:\n \"inline-block w-4 h-4 ml-3 mr-2 rounded-full bg-danger\"\n })\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.requirements\n ? _c(\n \"div\",\n _vm._l(_vm.requirements, function(requirement, index) {\n return _c(\n \"div\",\n {\n key: index,\n staticClass:\n \"grid grid-flow-row grid-cols-3 p-3 border border-gray-200 lg:gap-24 sm:gap-4\"\n },\n [\n _c(\"div\", { staticClass: \"col-span-2 text-sm\" }, [\n _vm._v(\n \"\\n \" + _vm._s(index) + \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"text-right\" }, [\n requirement\n ? _c(\"span\", {\n staticClass:\n \"inline-block w-4 h-4 ml-3 mr-2 rounded-full bg-success\"\n })\n : _c(\"span\", {\n staticClass:\n \"inline-block w-4 h-4 ml-3 mr-2 rounded-full bg-danger\"\n })\n ])\n ]\n )\n }),\n 0\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm.hasNext\n ? _c(\n \"sw-button\",\n {\n staticClass: \"mt-4 pull-right\",\n attrs: { variant: \"primary\" },\n on: { click: _vm.next }\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.$t(\"wizard.continue\")) + \"\\n \"\n ),\n _c(\"arrow-right-icon\", { staticClass: \"h-5 ml-2 -mr-1\" })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.requirements\n ? _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\"\n },\n on: { click: _vm.getRequirements }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.$t(\"wizard.req.check_req\")) +\n \"\\n \"\n )\n ]\n )\n : _vm._e()\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"sw-wizard-step\",\n {\n attrs: {\n title: _vm.$t(\"wizard.account_info\"),\n description: _vm.$t(\"wizard.account_info_desc\")\n }\n },\n [\n _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.next()\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 mb-4 md:grid-cols-2 md:mb-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$tc(\"settings.account_settings.profile_picture\")\n }\n },\n [\n _c(\"sw-avatar\", {\n attrs: {\n \"preview-avatar\": _vm.previewAvatar,\n label: _vm.$tc(\"general.choose_file\")\n },\n on: {\n changed: _vm.onChange,\n uploadHandler: _vm.onUploadHandler,\n handleUploadError: _vm.onHandleUploadError\n },\n scopedSlots: _vm._u([\n {\n key: \"icon\",\n fn: function() {\n return [\n _c(\"cloud-upload-icon\", {\n staticClass:\n \"h-5 mb-2 text-xl leading-6 text-gray-400\"\n })\n ]\n },\n proxy: true\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.profileData.name.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.profileData.name.$touch()\n }\n },\n model: {\n value: _vm.profileData.name,\n callback: function($$v) {\n _vm.$set(\n _vm.profileData,\n \"name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"profileData.name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.email\"),\n error: _vm.emailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.profileData.email.$error,\n type: \"text\",\n name: \"email\"\n },\n on: {\n input: function($event) {\n return _vm.$v.profileData.email.$touch()\n }\n },\n model: {\n value: _vm.profileData.email,\n callback: function($$v) {\n _vm.$set(\n _vm.profileData,\n \"email\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"profileData.email\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.password\"),\n error: _vm.passwordError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.profileData.password.$error,\n type: \"password\",\n name: \"password\"\n },\n on: {\n input: function($event) {\n return _vm.$v.profileData.password.$touch()\n }\n },\n model: {\n value: _vm.profileData.password,\n callback: function($$v) {\n _vm.$set(\n _vm.profileData,\n \"password\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"profileData.password\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.confirm_password\"),\n error: _vm.confirmPasswordError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.profileData.confirm_password.$error,\n type: \"password\",\n name: \"confirm_password\"\n },\n on: {\n input: function($event) {\n return _vm.$v.profileData.confirm_password.$touch()\n }\n },\n model: {\n value: _vm.profileData.confirm_password,\n callback: function($$v) {\n _vm.$set(\n _vm.profileData,\n \"confirm_password\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"profileData.confirm_password\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"mr-2\" })\n : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"wizard.save_cont\")) + \"\\n \")\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.next()\n }\n }\n },\n [\n _c(\n \"div\",\n [\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.app_url\"),\n error: _vm.urlError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.app_url.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.app_url.$touch()\n }\n },\n model: {\n value: _vm.databaseData.app_url,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"app_url\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.app_url\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.app_domain\"),\n error: _vm.domainError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.app_domain.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"crater.com\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.app_domain.$touch()\n }\n },\n model: {\n value: _vm.databaseData.app_domain,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"app_domain\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.app_domain\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.connection\"),\n error: _vm.connectionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_connection.$error,\n options: _vm.connections,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeConnection },\n model: {\n value: _vm.databaseData.database_connection,\n callback: function($$v) {\n _vm.$set(_vm.databaseData, \"database_connection\", $$v)\n },\n expression: \"databaseData.database_connection\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.port\"),\n error: _vm.portError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_port.$error,\n type: \"text\",\n name: \"database_port\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_port.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_port,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_port\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_port\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.db_name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_name.$error,\n type: \"text\",\n name: \"database_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_name.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_name,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.username\"),\n error: _vm.usernameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_username.$error,\n type: \"text\",\n name: \"database_username\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_username.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_username,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_username\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_username\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"wizard.database.password\") } },\n [\n _c(\"sw-input\", {\n attrs: { type: \"password\", name: \"name\" },\n model: {\n value: _vm.databaseData.database_password,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_password\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_password\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.host\"),\n error: _vm.hostnameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_hostname.$error,\n type: \"text\",\n name: \"database_hostname\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_hostname.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_hostname,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_hostname\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_hostname\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isFetching,\n expression: \"!isFetching\"\n }\n ],\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"h-5 mr-2\" })\n : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"wizard.save_cont\")) + \"\\n \")\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.next()\n }\n }\n },\n [\n _c(\n \"div\",\n [\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.app_url\"),\n error: _vm.urlError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.app_url.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.app_url.$touch()\n }\n },\n model: {\n value: _vm.databaseData.app_url,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"app_url\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.app_url\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.app_domain\"),\n error: _vm.domainError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.app_domain.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"crater.com\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.app_domain.$touch()\n }\n },\n model: {\n value: _vm.databaseData.app_domain,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"app_domain\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.app_domain\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.connection\"),\n error: _vm.connectionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_connection.$error,\n options: _vm.connections,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeConnection },\n model: {\n value: _vm.databaseData.database_connection,\n callback: function($$v) {\n _vm.$set(_vm.databaseData, \"database_connection\", $$v)\n },\n expression: \"databaseData.database_connection\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.port\"),\n error: _vm.portError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_port.$error,\n type: \"text\",\n name: \"database_port\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_port.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_port,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_port\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_port\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.db_name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_name.$error,\n type: \"text\",\n name: \"database_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_name.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_name,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.username\"),\n error: _vm.usernameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_username.$error,\n type: \"text\",\n name: \"database_username\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_username.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_username,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_username\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_username\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"wizard.database.password\") } },\n [\n _c(\"sw-input\", {\n attrs: { type: \"password\", name: \"name\" },\n model: {\n value: _vm.databaseData.database_password,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_password\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_password\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.host\"),\n error: _vm.hostnameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_hostname.$error,\n type: \"text\",\n name: \"database_hostname\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_hostname.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_hostname,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_hostname\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_hostname\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isFetching,\n expression: \"!isFetching\"\n }\n ],\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"h-5 mr-2\" })\n : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"wizard.save_cont\")) + \"\\n \")\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.next()\n }\n }\n },\n [\n _c(\n \"div\",\n [\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.app_url\"),\n error: _vm.urlError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.app_url.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.app_url.$touch()\n }\n },\n model: {\n value: _vm.databaseData.app_url,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"app_url\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.app_url\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.app_domain\"),\n error: _vm.domainError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.app_domain.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"crater.com\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.app_domain.$touch()\n }\n },\n model: {\n value: _vm.databaseData.app_domain,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"app_domain\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.app_domain\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.connection\"),\n error: _vm.connectionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_connection.$error,\n options: _vm.connections,\n \"allow-empty\": false,\n searchable: true,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeConnection },\n model: {\n value: _vm.databaseData.database_connection,\n callback: function($$v) {\n _vm.$set(_vm.databaseData, \"database_connection\", $$v)\n },\n expression: \"databaseData.database_connection\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.db_path\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_name.$error,\n type: \"text\",\n name: \"database_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_name.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_name,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_name\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isFetching,\n expression: \"!isFetching\"\n }\n ],\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"h-5 mr-2\" })\n : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"wizard.save_cont\")) + \"\\n \")\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n attrs: { action: \"\" },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.next()\n }\n }\n },\n [\n _c(\n \"div\",\n [\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.app_url\"),\n error: _vm.urlError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.app_url.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.app_url.$touch()\n }\n },\n model: {\n value: _vm.databaseData.app_url,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"app_url\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.app_url\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.app_domain\"),\n error: _vm.domainError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.app_domain.$error,\n type: \"text\",\n name: \"name\",\n placeholder: \"crater.com\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.app_domain.$touch()\n }\n },\n model: {\n value: _vm.databaseData.app_domain,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"app_domain\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.app_domain\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.connection\"),\n error: _vm.connectionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_connection.$error,\n options: _vm.connections,\n searchable: true,\n \"show-labels\": false,\n \"allow-empty\": false\n },\n on: { input: _vm.onChangeConnection },\n model: {\n value: _vm.databaseData.database_connection,\n callback: function($$v) {\n _vm.$set(_vm.databaseData, \"database_connection\", $$v)\n },\n expression: \"databaseData.database_connection\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.port\"),\n error: _vm.portError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_port.$error,\n type: \"text\",\n name: \"database_port\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_port.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_port,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_port\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_port\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.db_name\"),\n error: _vm.nameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_name.$error,\n type: \"text\",\n name: \"database_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_name.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_name,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.username\"),\n error: _vm.usernameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_username.$error,\n type: \"text\",\n name: \"database_username\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_username.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_username,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_username\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_username\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n { attrs: { label: _vm.$t(\"wizard.database.password\") } },\n [\n _c(\"sw-input\", {\n attrs: { type: \"password\", name: \"name\" },\n model: {\n value: _vm.databaseData.database_password,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_password\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_password\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.database.host\"),\n error: _vm.hostnameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.databaseData.database_hostname.$error,\n type: \"text\",\n name: \"database_hostname\"\n },\n on: {\n input: function($event) {\n return _vm.$v.databaseData.database_hostname.$touch()\n }\n },\n model: {\n value: _vm.databaseData.database_hostname,\n callback: function($$v) {\n _vm.$set(\n _vm.databaseData,\n \"database_hostname\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"databaseData.database_hostname\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isFetching,\n expression: \"!isFetching\"\n }\n ],\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.isLoading,\n disabled: _vm.isLoading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.isLoading\n ? _c(\"save-icon\", { staticClass: \"h-5 mr-2\" })\n : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"wizard.save_cont\")) + \"\\n \")\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.saveEmailConfig($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.driver\"),\n error: _vm.driverError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_driver.$error,\n options: _vm.mailDrivers,\n \"allow-empty\": false,\n searchable: true,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.mailConfigData.mail_driver,\n callback: function($$v) {\n _vm.$set(_vm.mailConfigData, \"mail_driver\", $$v)\n },\n expression: \"mailConfigData.mail_driver\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.from_name\"),\n error: _vm.fromNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.from_name.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_name.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_name,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_name\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.from_mail\"),\n error: _vm.fromMailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.from_mail.$error,\n type: \"text\",\n name: \"from_mail\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_mail.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_mail,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_mail\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_mail\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.loading,\n disabled: _vm.loading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.loading ? _c(\"save-icon\", { staticClass: \"mr-2\" }) : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \")\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.saveEmailConfig($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.driver\"),\n error: _vm.driverError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_driver.$error,\n options: _vm.mailDrivers,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.mailConfigData.mail_driver,\n callback: function($$v) {\n _vm.$set(_vm.mailConfigData, \"mail_driver\", $$v)\n },\n expression: \"mailConfigData.mail_driver\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.mailgun_domain\"),\n error: _vm.domainError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_mailgun_domain.$error,\n type: \"text\",\n name: \"mailgun_domain\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_mailgun_domain.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_mailgun_domain,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_mailgun_domain\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_mailgun_domain\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 lg:mb-6 md:mb-6\"\n },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.mailgun_secret\"),\n error: _vm.secretError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_mailgun_secret.$error,\n type: _vm.getInputType,\n name: \"mailgun_secret\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_mailgun_secret.$touch()\n }\n },\n scopedSlots: _vm._u([\n {\n key: \"rightIcon\",\n fn: function() {\n return [\n _vm.isShowPassword\n ? _c(\"eye-off-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n : _c(\"eye-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n ]\n },\n proxy: true\n }\n ]),\n model: {\n value: _vm.mailConfigData.mail_mailgun_secret,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_mailgun_secret\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_mailgun_secret\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.mailgun_endpoint\"),\n error: _vm.endpointError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_mailgun_endpoint.$error,\n type: \"text\",\n name: \"mailgun_endpoint\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_mailgun_endpoint.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_mailgun_endpoint,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_mailgun_endpoint\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_mailgun_endpoint\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.from_mail\"),\n error: _vm.fromMailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.from_mail.$error,\n type: \"text\",\n name: \"from_mail\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_mail.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_mail,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_mail\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_mail\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.from_name\"),\n error: _vm.fromNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.from_name.$error,\n type: \"text\",\n name: \"from_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_name.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_name,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_name\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.loading,\n disabled: _vm.loading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.loading ? _c(\"save-icon\", { staticClass: \"mr-2\" }) : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \")\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.saveEmailConfig($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.driver\"),\n error: _vm.driverError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_driver.$error,\n options: _vm.mailDrivers,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.mailConfigData.mail_driver,\n callback: function($$v) {\n _vm.$set(_vm.mailConfigData, \"mail_driver\", $$v)\n },\n expression: \"mailConfigData.mail_driver\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.host\"),\n error: _vm.hostError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_host.$error,\n type: \"text\",\n name: \"mail_host\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_host.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_host,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_host\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_host\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.port\"),\n error: _vm.portError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_port.$error,\n type: \"text\",\n name: \"mail_port\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_port.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_port,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_port\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_port\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.encryption\"),\n error: _vm.encryptionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_encryption.$error,\n options: _vm.encryptions,\n searchable: true,\n \"show-labels\": false\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_encryption.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_encryption,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_encryption\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_encryption\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.from_mail\"),\n error: _vm.fromEmailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.from_mail.$error,\n type: \"text\",\n name: \"from_mail\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_mail.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_mail,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_mail\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_mail\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.from_name\"),\n error: _vm.fromNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.from_name.$error,\n type: \"text\",\n name: \"name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_name.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_name,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_name\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.ses_key\"),\n error: _vm.keyError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_ses_key.$error,\n type: \"text\",\n name: \"mail_ses_key\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_ses_key.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_ses_key,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_ses_key\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_ses_key\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.ses_secret\"),\n error: _vm.secretError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_ses_secret.$error,\n type: _vm.getInputType,\n name: \"mail_ses_secret\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_ses_secret.$touch()\n }\n },\n scopedSlots: _vm._u([\n {\n key: \"rightIcon\",\n fn: function() {\n return [\n _vm.isShowPassword\n ? _c(\"eye-off-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n : _c(\"eye-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n ]\n },\n proxy: true\n }\n ]),\n model: {\n value: _vm.mailConfigData.mail_ses_secret,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_ses_secret\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_ses_secret\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.loading,\n disabled: _vm.loading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.loading ? _c(\"save-icon\", { staticClass: \"mr-2\" }) : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \")\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.saveEmailConfig()\n }\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.driver\"),\n error: _vm.driverError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_driver.$error,\n options: _vm.mailDrivers,\n searchable: true,\n \"allow-empty\": false,\n \"show-labels\": false\n },\n on: { input: _vm.onChangeDriver },\n model: {\n value: _vm.mailConfigData.mail_driver,\n callback: function($$v) {\n _vm.$set(_vm.mailConfigData, \"mail_driver\", $$v)\n },\n expression: \"mailConfigData.mail_driver\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.host\"),\n error: _vm.hostError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_host.$error,\n type: \"text\",\n name: \"mail_host\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_host.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_host,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_host\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_host\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.username\"),\n error: _vm.usernameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_username.$error,\n type: \"text\",\n name: \"db_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_username.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_username,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_username\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_username\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.password\"),\n error: _vm.passwordError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_password.$error,\n type: _vm.getInputType,\n name: \"password\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_password.$touch()\n }\n },\n scopedSlots: _vm._u([\n {\n key: \"rightIcon\",\n fn: function() {\n return [\n _vm.isShowPassword\n ? _c(\"eye-off-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n : _c(\"eye-icon\", {\n staticClass:\n \"w-5 h-5 mr-1 text-gray-500 cursor-pointer\",\n on: {\n click: function($event) {\n _vm.isShowPassword = !_vm.isShowPassword\n }\n }\n })\n ]\n },\n proxy: true\n }\n ]),\n model: {\n value: _vm.mailConfigData.mail_password,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_password\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_password\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.port\"),\n error: _vm.portError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_port.$error,\n type: \"text\",\n name: \"mail_port\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_port.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_port,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_port\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_port\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.encryption\"),\n error: _vm.encryptionError,\n required: \"\"\n }\n },\n [\n _c(\"sw-select\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.mail_encryption.$error,\n options: _vm.encryptions,\n searchable: true,\n \"show-labels\": false\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.mail_encryption.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.mail_encryption,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"mail_encryption\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.mail_encryption\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"grid grid-cols-1 gap-4 mb-6 md:grid-cols-2\" },\n [\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.from_mail\"),\n error: _vm.fromEmailError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.from_mail.$error,\n type: \"text\",\n name: \"from_mail\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_mail.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_mail,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_mail\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_mail\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-input-group\",\n {\n attrs: {\n label: _vm.$t(\"wizard.mail.from_name\"),\n error: _vm.fromNameError,\n required: \"\"\n }\n },\n [\n _c(\"sw-input\", {\n attrs: {\n invalid: _vm.$v.mailConfigData.from_name.$error,\n type: \"text\",\n name: \"from_name\"\n },\n on: {\n input: function($event) {\n return _vm.$v.mailConfigData.from_name.$touch()\n }\n },\n model: {\n value: _vm.mailConfigData.from_name,\n callback: function($$v) {\n _vm.$set(\n _vm.mailConfigData,\n \"from_name\",\n typeof $$v === \"string\" ? $$v.trim() : $$v\n )\n },\n expression: \"mailConfigData.from_name\"\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"sw-button\",\n {\n staticClass: \"mt-4\",\n attrs: {\n loading: _vm.loading,\n disabled: _vm.loading,\n variant: \"primary\",\n type: \"submit\"\n }\n },\n [\n !_vm.loading ? _c(\"save-icon\", { staticClass: \"mr-2\" }) : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.$t(\"general.save\")) + \"\\n \")\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","function getInternetExplorerVersion() {\n var ua = window.navigator.userAgent;\n var msie = ua.indexOf('MSIE ');\n\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n } // other browser\n\n\n return -1;\n}\n\n//\n\nlet isIE;\n\nfunction initCompat () {\n if (!initCompat.init) {\n initCompat.init = true;\n isIE = getInternetExplorerVersion() !== -1;\n }\n}\n\nvar script = {\n name: 'ResizeObserver',\n\n props: {\n emitOnMount: {\n type: Boolean,\n default: false,\n },\n\n ignoreWidth: {\n type: Boolean,\n default: false,\n },\n\n ignoreHeight: {\n type: Boolean,\n default: false,\n },\n },\n\n mounted () {\n initCompat();\n this.$nextTick(() => {\n this._w = this.$el.offsetWidth;\n this._h = this.$el.offsetHeight;\n if (this.emitOnMount) {\n this.emitSize();\n }\n });\n const object = document.createElement('object');\n this._resizeObject = object;\n object.setAttribute('aria-hidden', 'true');\n object.setAttribute('tabindex', -1);\n object.onload = this.addResizeHandlers;\n object.type = 'text/html';\n if (isIE) {\n this.$el.appendChild(object);\n }\n object.data = 'about:blank';\n if (!isIE) {\n this.$el.appendChild(object);\n }\n },\n\n beforeDestroy () {\n this.removeResizeHandlers();\n },\n\n methods: {\n compareAndNotify () {\n if ((!this.ignoreWidth && this._w !== this.$el.offsetWidth) || (!this.ignoreHeight && this._h !== this.$el.offsetHeight)) {\n this._w = this.$el.offsetWidth;\n this._h = this.$el.offsetHeight;\n this.emitSize();\n }\n },\n\n emitSize () {\n this.$emit('notify', {\n width: this._w,\n height: this._h,\n });\n },\n\n addResizeHandlers () {\n this._resizeObject.contentDocument.defaultView.addEventListener('resize', this.compareAndNotify);\n this.compareAndNotify();\n },\n\n removeResizeHandlers () {\n if (this._resizeObject && this._resizeObject.onload) {\n if (!isIE && this._resizeObject.contentDocument) {\n this._resizeObject.contentDocument.defaultView.removeEventListener('resize', this.compareAndNotify);\n }\n this.$el.removeChild(this._resizeObject);\n this._resizeObject.onload = null;\n this._resizeObject = null;\n }\n },\n },\n};\n\nfunction normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier\n/* server only */\n, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\n if (typeof shadowMode !== 'boolean') {\n createInjectorSSR = createInjector;\n createInjector = shadowMode;\n shadowMode = false;\n } // Vue.extend constructor export interop.\n\n\n var options = typeof script === 'function' ? script.options : script; // render functions\n\n if (template && template.render) {\n options.render = template.render;\n options.staticRenderFns = template.staticRenderFns;\n options._compiled = true; // functional template\n\n if (isFunctionalTemplate) {\n options.functional = true;\n }\n } // scopedId\n\n\n if (scopeId) {\n options._scopeId = scopeId;\n }\n\n var hook;\n\n if (moduleIdentifier) {\n // server build\n hook = function hook(context) {\n // 2.3 injection\n context = context || // cached call\n this.$vnode && this.$vnode.ssrContext || // stateful\n this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; // functional\n // 2.2 with runInNewContext: true\n\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__;\n } // inject component styles\n\n\n if (style) {\n style.call(this, createInjectorSSR(context));\n } // register component module identifier for async chunk inference\n\n\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier);\n }\n }; // used by ssr in case component is cached and beforeCreate\n // never gets called\n\n\n options._ssrRegister = hook;\n } else if (style) {\n hook = shadowMode ? function (context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\n } : function (context) {\n style.call(this, createInjector(context));\n };\n }\n\n if (hook) {\n if (options.functional) {\n // register for functional component in vue file\n var originalRender = options.render;\n\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate;\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n\n return script;\n}\n\n/* script */\nconst __vue_script__ = script;\n/* template */\nvar __vue_render__ = function() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"div\", {\n staticClass: \"resize-observer\",\n attrs: { tabindex: \"-1\" }\n })\n};\nvar __vue_staticRenderFns__ = [];\n__vue_render__._withStripped = true;\n\n /* style */\n const __vue_inject_styles__ = undefined;\n /* scoped */\n const __vue_scope_id__ = \"data-v-8859cc6c\";\n /* module identifier */\n const __vue_module_identifier__ = undefined;\n /* functional template */\n const __vue_is_functional_template__ = false;\n /* style inject */\n \n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/normalizeComponent(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n undefined,\n undefined,\n undefined\n );\n\nfunction install(Vue) {\n // eslint-disable-next-line vue/component-definition-name-casing\n Vue.component('resize-observer', __vue_component__);\n Vue.component('ResizeObserver', __vue_component__);\n}\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"1.0.0\",\n install: install\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { __vue_component__ as ResizeObserver, install };\n//# sourceMappingURL=vue-resize.esm.js.map\n","/**\n * vue-router v2.7.0\n * (c) 2017 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (process.env.NODE_ENV !== 'production' && !condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nvar View = {\n name: 'router-view',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n if (parent.$vnode && parent.$vnode.data.routerView) {\n depth++;\n }\n if (parent._inactive) {\n inactive = true;\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n return h(cache[name], data, children)\n }\n\n var matched = route.matched[depth];\n // render empty node if no matched route\n if (!matched) {\n cache[name] = null;\n return h()\n }\n\n var component = cache[name] = matched.components[name];\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also regiseter instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // resolve props\n data.props = resolveProps(route, matched.props && matched.props[name]);\n\n return h(component, data, children)\n }\n};\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nvar decode = decodeURIComponent;\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n var val = extraQuery[key];\n parsedQuery[key] = Array.isArray(val) ? val.slice() : val;\n }\n return parsedQuery\n}\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0\n ? decode(parts.join('='))\n : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj ? Object.keys(obj).map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n }).filter(function (x) { return x.length > 0; }).join('&') : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery$$1 = router && router.options.stringifyQuery;\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: location.query || {},\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery$$1),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery$$1);\n }\n return Object.freeze(route)\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return (\n a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') &&\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query)\n )\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params)\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key) {\n var aVal = a[key];\n var bVal = b[key];\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar Link = {\n name: 'router-link',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n exact: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(this.to, current, this.append);\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback = globalActiveClass == null\n ? 'router-link-active'\n : globalActiveClass;\n var exactActiveClassFallback = globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass = this.activeClass == null\n ? activeClassFallback\n : this.activeClass;\n var exactActiveClass = this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n var compareTarget = location.path\n ? createRoute(null, location, null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget);\n classes[activeClass] = this.exact\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1.replace) {\n router.replace(location);\n } else {\n router.push(location);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) { on[e] = handler; });\n } else {\n on[this.event] = handler;\n }\n\n var data = {\n class: classes\n };\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href };\n } else {\n // find the first child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the is a static node\n a.isStatic = false;\n var extend = _Vue.util.extend;\n var aData = a.data = extend({}, a.data);\n aData.on = on;\n var aAttrs = a.data.attrs = extend({}, a.data.attrs);\n aAttrs.href = href;\n } else {\n // doesn't have child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('router-view', View);\n Vue.component('router-link', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/\\//g, '/')\n}\n\nvar index$1 = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar index = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$');\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (index$1(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!index$1(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!index$1(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (index$1(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n\nindex.parse = parse_1;\nindex.compile = compile_1;\nindex.tokensToFunction = tokensToFunction_1;\nindex.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = index.compile(path));\n return filler(params || {}, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n }\n}\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n var pathMap = oldPathMap || Object.create(null);\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(path || name)) + \" cannot be a \" +\n \"string id. Use an actual component instead.\"\n );\n }\n\n var normalizedPath = normalizePath(path, parent);\n var pathToRegexpOptions = route.pathToRegexpOptions || {};\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n instances: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props: route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (route.name && !route.redirect && route.children.some(function (child) { return /^\\/?$/.test(child.path); })) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias)\n ? route.alias\n : [route.alias];\n\n aliases.forEach(function (alias) {\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (path, pathToRegexpOptions) {\n var regex = index(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = {};\n regex.keys.forEach(function (key) {\n warn(!keys[key.name], (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\"));\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (path, parent) {\n path = path.replace(/\\/$/, '');\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next.name || next._normalized) {\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = assign({}, next);\n next._normalized = true;\n var params = assign(assign({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction assign (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\n/* */\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n if (record) {\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n }\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n var val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i];\n if (key) {\n params[key.name] = val;\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n window.addEventListener('popstate', function (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n });\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior(to, from, isPop ? position : null);\n if (!shouldScroll) {\n return\n }\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n var el = document.querySelector(shouldScroll.selector);\n if (el) {\n var offset = shouldScroll.offset && typeof shouldScroll.offset === 'object' ? shouldScroll.offset : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n window.scrollTo(position.x, position.y);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\n/* */\n\nvar supportsPushState = inBrowser && (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && 'pushState' in window.history\n})();\n\n// use User Timing api (if present) for more accurate key precision\nvar Time = inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nvar _key = genKey();\n\nfunction genKey () {\n return Time.now().toFixed(3)\n}\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n _key = key;\n}\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n history.replaceState({ key: _key }, '', url);\n } else {\n _key = genKey();\n history.pushState({ key: _key }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (resolvedDef.__esModule && resolvedDef.default) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (location, onComplete, onAbort) {\n var this$1 = this;\n\n var route = this.router.match(location, this.current);\n this.confirmTransition(route, function () {\n this$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1.ensureURL();\n\n // fire ready cbs once\n if (!this$1.ready) {\n this$1.ready = true;\n this$1.readyCbs.forEach(function (cb) { cb(route); });\n }\n }, function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1.ready) {\n this$1.ready = true;\n this$1.readyErrorCbs.forEach(function (cb) { cb(err); });\n }\n });\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1 = this;\n\n var current = this.current;\n var abort = function (err) {\n if (isError(err)) {\n if (this$1.errorCbs.length) {\n this$1.errorCbs.forEach(function (cb) { cb(err); });\n } else {\n warn(false, 'uncaught error during route navigation:');\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n route.matched.length === current.matched.length\n ) {\n this.ensureURL();\n return abort()\n }\n\n var ref = resolveQueue(this.current.matched, route.matched);\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n this.pending = route;\n var iterator = function (hook, next) {\n if (this$1.pending !== route) {\n return abort()\n }\n try {\n hook(route, current, function (to) {\n if (to === false || isError(to)) {\n // next(false) -> abort navigation, ensure current URL\n this$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' && (\n typeof to.path === 'string' ||\n typeof to.name === 'string'\n ))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort();\n if (typeof to === 'object' && to.replace) {\n this$1.replace(to);\n } else {\n this$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n var postEnterCbs = [];\n var isValid = function () { return this$1.current === route; };\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid);\n var queue = enterGuards.concat(this$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1.pending !== route) {\n return abort()\n }\n this$1.pending = null;\n onComplete(route);\n if (this$1.router.app) {\n this$1.router.app.$nextTick(function () {\n postEnterCbs.forEach(function (cb) { cb(); });\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n var prev = this.current;\n this.current = route;\n this.cb && this.cb(route);\n this.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated,\n cbs,\n isValid\n) {\n return extractGuards(activated, 'beforeRouteEnter', function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key, cbs, isValid)\n })\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key,\n cbs,\n isValid\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n next(cb);\n if (typeof cb === 'function') {\n cbs.push(function () {\n // #750\n // if a router-view is wrapped with an out-in transition,\n // the instance may not have been registered at this time.\n // we will need to poll for registration until current route\n // is no longer valid.\n poll(cb, match.instances, key, isValid);\n });\n }\n })\n }\n}\n\nfunction poll (\n cb, // somehow flow cannot infer this is a function\n instances,\n key,\n isValid\n) {\n if (instances[key]) {\n cb(instances[key]);\n } else if (isValid()) {\n setTimeout(function () {\n poll(cb, instances, key, isValid);\n }, 16);\n }\n}\n\n/* */\n\n\nvar HTML5History = (function (History$$1) {\n function HTML5History (router, base) {\n var this$1 = this;\n\n History$$1.call(this, router, base);\n\n var expectScroll = router.options.scrollBehavior;\n\n if (expectScroll) {\n setupScroll();\n }\n\n window.addEventListener('popstate', function (e) {\n var current = this$1.current;\n this$1.transitionTo(getLocation(this$1.base), function (route) {\n if (expectScroll) {\n handleScroll(router, route, current, true);\n }\n });\n });\n }\n\n if ( History$$1 ) HTML5History.__proto__ = History$$1;\n HTML5History.prototype = Object.create( History$$1 && History$$1.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = window.location.pathname;\n if (base && path.indexOf(base) === 0) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\n\nvar HashHistory = (function (History$$1) {\n function HashHistory (router, base, fallback) {\n History$$1.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History$$1 ) HashHistory.__proto__ = History$$1;\n HashHistory.prototype = Object.create( History$$1 && History$$1.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1 = this;\n\n window.addEventListener('hashchange', function () {\n if (!ensureSlash()) {\n return\n }\n this$1.transitionTo(getHash(), function (route) {\n replaceHash(route.fullPath);\n });\n });\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n this.transitionTo(location, function (route) {\n pushHash(route.fullPath);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n this.transitionTo(location, function (route) {\n replaceHash(route.fullPath);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(\n cleanPath(base + '/#' + location)\n );\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n return index === -1 ? '' : href.slice(index + 1)\n}\n\nfunction pushHash (path) {\n window.location.hash = path;\n}\n\nfunction replaceHash (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n window.location.replace((base + \"#\" + path));\n}\n\n/* */\n\n\nvar AbstractHistory = (function (History$$1) {\n function AbstractHistory (router, base) {\n History$$1.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History$$1 ) AbstractHistory.__proto__ = History$$1;\n AbstractHistory.prototype = Object.create( History$$1 && History$$1.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(location, function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);\n this$1.index++;\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(location, function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(route, function () {\n this$1.index = targetIndex;\n this$1.updateRoute(route);\n });\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback = mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: {} };\n\nVueRouter.prototype.match = function match (\n raw,\n current,\n redirectedFrom\n) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1 = this;\n\n process.env.NODE_ENV !== 'production' && assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // main app already initialized.\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History) {\n history.transitionTo(history.getCurrentLocation());\n } else if (history instanceof HashHistory) {\n var setupHashListener = function () {\n history.setupListeners();\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupHashListener,\n setupHashListener\n );\n }\n\n history.listen(function (route) {\n this$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n this.history.push(location, onComplete, onAbort);\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n this.history.replace(location, onComplete, onAbort);\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply([], route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n }))\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n var location = normalizeLocation(\n to,\n current || this.history.current,\n append,\n this\n );\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\nVueRouter.install = install;\nVueRouter.version = '2.7.0';\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nexport default VueRouter;\n","/*!\n * Vue.js v2.6.12\n * (c) 2014-2020 Evan You\n * Released under the MIT License.\n */\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a string containing static keys from compiler modules.\n */\nfunction genStaticKeys (modules) {\n return modules.reduce(function (keys, m) {\n return keys.concat(m.staticKeys || [])\n }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return ''\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n targetStack.push(target);\n Dep.target = target;\n}\n\nfunction popTarget () {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n protoAugment(value, arrayMethods);\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n process.env.NODE_ENV !== 'production' && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (process.env.NODE_ENV !== 'production') {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (process.env.NODE_ENV !== 'production') {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n process.env.NODE_ENV !== 'production' &&\n // skip validation for weex recycle-list child component props\n !(false)\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Technically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals. ' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. + + diff --git a/resources/scripts/components/modal-components/SendInvoiceModal.vue b/resources/scripts/components/modal-components/SendInvoiceModal.vue new file mode 100644 index 000000000..33673b092 --- /dev/null +++ b/resources/scripts/components/modal-components/SendInvoiceModal.vue @@ -0,0 +1,285 @@ + + + diff --git a/resources/scripts/components/modal-components/SendPaymentModal.vue b/resources/scripts/components/modal-components/SendPaymentModal.vue new file mode 100644 index 000000000..20be0b4c0 --- /dev/null +++ b/resources/scripts/components/modal-components/SendPaymentModal.vue @@ -0,0 +1,281 @@ + + + diff --git a/resources/scripts/components/modal-components/TaxTypeModal.vue b/resources/scripts/components/modal-components/TaxTypeModal.vue new file mode 100644 index 000000000..3f5e20de5 --- /dev/null +++ b/resources/scripts/components/modal-components/TaxTypeModal.vue @@ -0,0 +1,259 @@ + + + diff --git a/resources/scripts/components/modal-components/custom-fields/CustomFieldModal.vue b/resources/scripts/components/modal-components/custom-fields/CustomFieldModal.vue new file mode 100644 index 000000000..b72dc9959 --- /dev/null +++ b/resources/scripts/components/modal-components/custom-fields/CustomFieldModal.vue @@ -0,0 +1,422 @@ + + + diff --git a/resources/scripts/components/modal-components/custom-fields/OptionsCreate.vue b/resources/scripts/components/modal-components/custom-fields/OptionsCreate.vue new file mode 100644 index 000000000..0ec049bd9 --- /dev/null +++ b/resources/scripts/components/modal-components/custom-fields/OptionsCreate.vue @@ -0,0 +1,36 @@ + + + diff --git a/resources/scripts/components/modal-components/disks/DoSpacesDisk.vue b/resources/scripts/components/modal-components/disks/DoSpacesDisk.vue new file mode 100644 index 000000000..694f0af7b --- /dev/null +++ b/resources/scripts/components/modal-components/disks/DoSpacesDisk.vue @@ -0,0 +1,329 @@ + + + diff --git a/resources/scripts/components/modal-components/disks/DropboxDisk.vue b/resources/scripts/components/modal-components/disks/DropboxDisk.vue new file mode 100644 index 000000000..627d12af8 --- /dev/null +++ b/resources/scripts/components/modal-components/disks/DropboxDisk.vue @@ -0,0 +1,299 @@ + + + diff --git a/resources/scripts/components/modal-components/disks/LocalDisk.vue b/resources/scripts/components/modal-components/disks/LocalDisk.vue new file mode 100644 index 000000000..9f99b5182 --- /dev/null +++ b/resources/scripts/components/modal-components/disks/LocalDisk.vue @@ -0,0 +1,221 @@ + + + diff --git a/resources/scripts/components/modal-components/disks/S3Disk.vue b/resources/scripts/components/modal-components/disks/S3Disk.vue new file mode 100644 index 000000000..666277ed2 --- /dev/null +++ b/resources/scripts/components/modal-components/disks/S3Disk.vue @@ -0,0 +1,304 @@ + + + diff --git a/resources/scripts/components/notifications/NotificationItem.vue b/resources/scripts/components/notifications/NotificationItem.vue new file mode 100644 index 000000000..d30e26b05 --- /dev/null +++ b/resources/scripts/components/notifications/NotificationItem.vue @@ -0,0 +1,172 @@ + + + diff --git a/resources/scripts/components/notifications/NotificationRoot.vue b/resources/scripts/components/notifications/NotificationRoot.vue new file mode 100644 index 000000000..553ec0e16 --- /dev/null +++ b/resources/scripts/components/notifications/NotificationRoot.vue @@ -0,0 +1,54 @@ + + + diff --git a/resources/scripts/global-components.js b/resources/scripts/global-components.js new file mode 100644 index 000000000..65f285954 --- /dev/null +++ b/resources/scripts/global-components.js @@ -0,0 +1,33 @@ +import { defineAsyncComponent } from 'vue' + +export const defineGlobalComponents = (app) => { + const components = import.meta.globEager('./components/base/*.vue') + + Object.entries(components).forEach(([path, definition]) => { + // Get name of component, based on filename + // "./components/Fruits.vue" will become "Fruits" + const componentName = path + .split('/') + .pop() + .replace(/\.\w+$/, '') + + // Register component on this Vue instance + app.component(componentName, definition.default) + }) + + const BaseTable = defineAsyncComponent(() => + import('./components/base/base-table/BaseTable.vue') + ) + + const BaseMultiselect = defineAsyncComponent(() => + import('./components/base-select/BaseMultiselect.vue') + ) + + const BaseEditor = defineAsyncComponent(() => + import('./components/base/base-editor/BaseEditor.vue') + ) + + app.component('BaseTable', BaseTable) + app.component('BaseMultiselect', BaseMultiselect) + app.component('BaseEditor', BaseEditor) +} diff --git a/resources/scripts/helpers/error-handling.js b/resources/scripts/helpers/error-handling.js new file mode 100644 index 000000000..c796e65b6 --- /dev/null +++ b/resources/scripts/helpers/error-handling.js @@ -0,0 +1,157 @@ +import { useAuthStore } from '@/scripts/stores/auth' +import { useNotificationStore } from '@/scripts/stores/notification' + +export const handleError = (err) => { + const authStore = useAuthStore() + const notificationStore = useNotificationStore() + + if (!err.response) { + notificationStore.showNotification({ + type: 'error', + message: + 'Please check your internet connection or wait until servers are back online.', + }) + } else { + if ( + err.response.data && + (err.response.statusText === 'Unauthorized' || + err.response.data === ' Unauthorized.') + ) { + // Unauthorized and log out + const msg = err.response.data.message + ? err.response.data.message + : 'Unauthorized' + + showToaster(msg) + + authStore.logout() + } else if (err.response.data.errors) { + // Show a notification per error + const errors = JSON.parse(JSON.stringify(err.response.data.errors)) + for (const i in errors) { + showError(errors[i][0]) + } + } else if (err.response.data.error) { + showError(err.response.data.error) + } else { + showError(err.response.data.message) + } + } +} + +export const showError = (error) => { + switch (error) { + case 'These credentials do not match our records.': + showToaster('errors.login_invalid_credentials') + break + case 'invalid_key': + showToaster('errors.invalid_provider_key') + break + + case 'This feature is available on Starter plan and onwards!': + showToaster('errors.starter_plan') + break + + case 'taxes_attached': + showToaster('settings.tax_types.already_in_use') + break + + case 'expense_attached': + showToaster('settings.expense_category.already_in_use') + break + + case 'payments_attached': + showToaster('settings.payment_modes.already_in_use') + break + + case 'role_attached_to_users': + showToaster('settings.roles.already_in_use') + break + + case 'items_attached': + showToaster('settings.customization.items.already_in_use') + break + + case 'payment_attached_message': + showToaster('invoices.payment_attached_message') + break + + case 'The email has already been taken.': + showToaster('validation.email_already_taken') + break + + case 'Relation estimateItems exists.': + showToaster('items.item_attached_message') + break + + case 'Relation invoiceItems exists.': + showToaster('items.item_attached_message') + break + + case 'Relation taxes exists.': + showToaster('settings.tax_types.already_in_use') + break + + case 'Relation taxes exists.': + showToaster('settings.tax_types.already_in_use') + break + + case 'Relation payments exists.': + showToaster('errors.payment_attached') + break + + case 'The estimate number has already been taken.': + showToaster('errors.estimate_number_used') + break + + case 'The payment number has already been taken.': + showToaster('errors.estimate_number_used') + break + + case 'The invoice number has already been taken.': + showToaster('errors.invoice_number_used') + break + + case 'The name has already been taken.': + showToaster('errors.name_already_taken') + break + + case 'total_invoice_amount_must_be_more_than_paid_amount': + showToaster('invoices.invalid_due_amount_message') + break + + case 'you_cannot_edit_currency': + showToaster('customers.edit_currency_not_allowed') + break + + case 'receipt_does_not_exist': + showToaster('errors.receipt_does_not_exist') + break + + case 'customer_cannot_be_changed_after_payment_is_added': + showToaster('errors.customer_cannot_be_changed_after_payment_is_added') + break + + case 'invalid_credentials': + showToaster('errors.invalid_credentials') + break + + case 'not_allowed': + showToaster('errors.not_allowed') + break + + default: + showToaster(error, false) + break + } +} + +export const showToaster = (msg, t = true) => { + const { global } = window.i18n + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'error', + message: t ? global.t(msg) : msg, + }) +} diff --git a/resources/scripts/helpers/use-popper.js b/resources/scripts/helpers/use-popper.js new file mode 100644 index 000000000..1196190fb --- /dev/null +++ b/resources/scripts/helpers/use-popper.js @@ -0,0 +1,27 @@ +import { ref, onMounted, watchEffect } from 'vue' +import { createPopper } from '@popperjs/core' + +export function usePopper(options) { + let activator = ref(null) + let container = ref(null) + let popper = ref(null) + + onMounted(() => { + watchEffect(onInvalidate => { + if (!container.value) return + if (!activator.value) return + + let containerEl = container.value.el || container.value + let activatorEl = activator.value.el || activator.value + + if (!(activatorEl instanceof HTMLElement)) return + if (!(containerEl instanceof HTMLElement)) return + + popper.value = createPopper(activatorEl, containerEl, options) + + onInvalidate(popper.value.destroy) + }) + }) + + return [activator, container, popper] +} diff --git a/resources/scripts/helpers/utilities.js b/resources/scripts/helpers/utilities.js new file mode 100644 index 000000000..c78af3da0 --- /dev/null +++ b/resources/scripts/helpers/utilities.js @@ -0,0 +1,280 @@ +import i18n from '../plugins/i18n' +const { global } = i18n +import { useNotificationStore } from '@/scripts/stores/notification' +import { isArray } from 'lodash' + +export default { + isImageFile(fileType) { + const validImageTypes = ['image/gif', 'image/jpeg', 'image/png'] + + return validImageTypes.includes(fileType) + }, + addClass(el, className) { + if (el.classList) el.classList.add(className) + else el.className += ' ' + className + }, + hasClass(el, className) { + const hasClass = el.classList + ? el.classList.contains(className) + : new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className) + + return hasClass + }, + + formatMoney(amount, currency = 0) { + if (!currency) { + currency = { + precision: 2, + thousand_separator: ',', + decimal_separator: '.', + symbol: '$', + } + } + + amount = amount / 100 + + let { + precision, + decimal_separator, + thousand_separator, + symbol, + swap_currency_symbol, + } = currency + + try { + precision = Math.abs(precision) + precision = isNaN(precision) ? 2 : precision + + const negativeSign = amount < 0 ? '-' : '' + + let i = parseInt( + (amount = Math.abs(Number(amount) || 0).toFixed(precision)) + ).toString() + let j = i.length > 3 ? i.length % 3 : 0 + + let moneySymbol = `${symbol}` + let thousandText = j ? i.substr(0, j) + thousand_separator : '' + let amountText = i + .substr(j) + .replace(/(\d{3})(?=\d)/g, '$1' + thousand_separator) + let precisionText = precision + ? decimal_separator + + Math.abs(amount - i) + .toFixed(precision) + .slice(2) + : '' + let combinedAmountText = + negativeSign + thousandText + amountText + precisionText + + return swap_currency_symbol + ? combinedAmountText + ' ' + moneySymbol + : moneySymbol + ' ' + combinedAmountText + } catch (e) { + console.error(e) + } + }, + + // Merge two objects but only existing properties + mergeSettings(target, source) { + Object.keys(source).forEach(function (key) { + if (key in target) { + // or target.hasOwnProperty(key) + target[key] = source[key] + } + }) + }, + + checkValidUrl(url) { + if ( + url.includes('http://localhost') || + url.includes('http://127.0.0.1') || + url.includes('https://localhost') || + url.includes('https://127.0.0.1') + ) { + return true + } + let pattern = new RegExp( + '^(https?:\\/\\/)?' + // protocol + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name + '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path + '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string + '(\\#[-a-z\\d_]*)?$', + 'i' + ) // fragment locator + + return !!pattern.test(url) + }, + + checkValidDomainUrl(url) { + if (url.includes('localhost')) { + return true + } + let pattern = new RegExp( + '^([0-9A-Za-z-\\.@:%_+~#=]+)+((\\.[a-zA-Z]{2,3})+)(/(.)*)?(\\?(.)*)?' + ) + return !!pattern.test(url) + }, + + fallbackCopyTextToClipboard(text) { + var textArea = document.createElement('textarea') + textArea.value = text + // Avoid scrolling to bottom + textArea.style.top = '0' + textArea.style.left = '0' + textArea.style.position = 'fixed' + document.body.appendChild(textArea) + textArea.focus() + textArea.select() + try { + var successful = document.execCommand('copy') + var msg = successful ? 'successful' : 'unsuccessful' + console.log('Fallback: Copying text command was ' + msg) + } catch (err) { + console.error('Fallback: Oops, unable to copy', err) + } + document.body.removeChild(textArea) + }, + copyTextToClipboard(text) { + if (!navigator.clipboard) { + this.fallbackCopyTextToClipboard(text) + return + } + navigator.clipboard.writeText(text).then( + function () { + return true + }, + function (err) { + return false + } + ) + }, + arrayDifference(array1, array2) { + return array1?.filter((i) => { + return array2?.indexOf(i) < 0 + }) + }, + getBadgeStatusColor(status) { + switch (status) { + case 'DRAFT': + return { + bgColor: '#F8EDCB', + color: '#744210', + } + case 'PAID': + return { + bgColor: '#D5EED0', + color: '#276749', + } + case 'UNPAID': + return { + bgColor: '#F8EDC', + color: '#744210', + } + case 'SENT': + return { + bgColor: 'rgba(246, 208, 154, 0.4)', + color: '#975a16', + } + case 'REJECTED': + return { + bgColor: '#E1E0EA', + color: '#1A1841', + } + case 'ACCEPTED': + return { + bgColor: '#D5EED0', + color: '#276749', + } + case 'VIEWED': + return { + bgColor: '#C9E3EC', + color: '#2c5282', + } + case 'EXPIRED': + return { + bgColor: '#FED7D7', + color: '#c53030', + } + case 'PARTIALLY PAID': + return { + bgColor: '#C9E3EC', + color: '#2c5282', + } + case 'OVERDUE': + return { + bgColor: '#FED7D7', + color: '#c53030', + } + case 'COMPLETED': + return { + bgColor: '#D5EED0', + color: '#276749', + } + case 'DUE': + return { + bgColor: '#F8EDCB', + color: '#744210', + } + case 'YES': + return { + bgColor: '#D5EED0', + color: '#276749', + } + case 'NO': + return { + bgColor: '#FED7D7', + color: '#c53030', + } + } + }, + getStatusTranslation(status) { + switch (status) { + case 'DRAFT': + return global.t('general.draft') + case 'PAID': + return global.t('invoices.paid') + case 'UNPAID': + return global.t('invoices.unpaid') + case 'SENT': + return global.t('general.sent') + case 'REJECTED': + return global.t('estimates.rejected') + case 'ACCEPTED': + return global.t('estimates.accepted') + case 'VIEWED': + return global.t('invoices.viewed') + case 'EXPIRED': + return global.t('estimates.expired') + case 'PARTIALLY PAID': + return global.t('estimates.partially_paid') + case 'OVERDUE': + return global.t('invoices.overdue') + case 'COMPLETED': + return global.t('invoices.completed') + case 'DUE': + return global.t('general.due') + default: + return status + } + }, + toFormData(object) { + const formData = new FormData() + + Object.keys(object).forEach((key) => { + if (isArray(object[key])) { + formData.append(key, JSON.stringify(object[key])) + } else { + // Convert null to empty strings (because formData does not support null values and converts it to string) + if (object[key] === null) { + object[key] = '' + } + + formData.append(key, object[key]) + } + }) + + return formData + }, + +} diff --git a/resources/scripts/layouts/LayoutBasic.vue b/resources/scripts/layouts/LayoutBasic.vue new file mode 100644 index 000000000..eb037a7b3 --- /dev/null +++ b/resources/scripts/layouts/LayoutBasic.vue @@ -0,0 +1,88 @@ + + + diff --git a/resources/scripts/layouts/LayoutInstallation.vue b/resources/scripts/layouts/LayoutInstallation.vue new file mode 100644 index 000000000..b5225abc3 --- /dev/null +++ b/resources/scripts/layouts/LayoutInstallation.vue @@ -0,0 +1,13 @@ + + + diff --git a/resources/scripts/layouts/LayoutLogin.vue b/resources/scripts/layouts/LayoutLogin.vue new file mode 100644 index 000000000..4a276ff8d --- /dev/null +++ b/resources/scripts/layouts/LayoutLogin.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/resources/scripts/layouts/partials/TheSiteHeader.vue b/resources/scripts/layouts/partials/TheSiteHeader.vue new file mode 100644 index 000000000..5ffea43e3 --- /dev/null +++ b/resources/scripts/layouts/partials/TheSiteHeader.vue @@ -0,0 +1,170 @@ + + + diff --git a/resources/scripts/layouts/partials/TheSiteSidebar.vue b/resources/scripts/layouts/partials/TheSiteSidebar.vue new file mode 100644 index 000000000..638914f81 --- /dev/null +++ b/resources/scripts/layouts/partials/TheSiteSidebar.vue @@ -0,0 +1,178 @@ + + + diff --git a/resources/assets/js/plugins/ar.json b/resources/scripts/locales/ar.json similarity index 86% rename from resources/assets/js/plugins/ar.json rename to resources/scripts/locales/ar.json index d5c72e87b..b01881581 100644 --- a/resources/assets/js/plugins/ar.json +++ b/resources/scripts/locales/ar.json @@ -1,28 +1,28 @@ { "navigation": { - "dashboard": "لوحة القيادة", + "dashboard": "الرئيسية", "customers": "العملاء", - "items": "بضائع/خدمات", + "items": "الأصناف", "invoices": "الفواتير", "expenses": "النفقات", "estimates": "التقديرات", - "payments": "الدفوعات", + "payments": "المدفوعات", "reports": "التقارير", "settings": "الإعدادات", - "logout": "تسجيل الخروج", + "logout": "خروج", "users": "المستخدمون" }, "general": { "add_company": "أضف شركة", "view_pdf": "عرض PDF", - "copy_pdf_url": "نسخ رابط PDF", + "copy_pdf_url": "Copy PDF Url", "download_pdf": "تنزيل PDF", "save": "حفظ", - "create": "إنشاء", - "cancel": "تراجع", + "create": "خلق", + "cancel": "إلغاء الأمر", "update": "تحديث", - "deselect": "إلغاء الإختيار", - "download": "تحميل", + "deselect": "Deselect", + "download": "تنزيل", "from_date": "من تاريخ", "to_date": "إلى تاريخ", "from": "من", @@ -50,44 +50,43 @@ "discount": "خصم", "fixed": "ثابت", "percentage": "نسبة", - "tax": "اداء", + "tax": "ضريبة", "total_amount": "المبلغ الإجمالي", - "bill_to": "الفاتورة لـ", + "bill_to": "مطلوب من", "ship_to": "يشحن إلى", - "due": "المتبقي", + "due": "واجبة السداد", "draft": "مسودة", - "sent": "ارسلت", + "sent": "مرسلة", "all": "الكل", - "select_all": "تحديد الكل", + "select_all": "تحديد الل", "choose_file": "اضغط هنا لاختيار ملف", "choose_template": "اختيار القالب", "choose": "اختر", - "remove": "حذف", - "powered_by": "بدعم من", - "bytefury": "Bytefury", + "remove": "إزالة", + "powered_by": "تصميم", + "bytefury": "باترفوري", "select_a_status": "اختر الحالة", - "select_a_tax": "اختر الاداء", + "select_a_tax": "اختر الضريبة", "search": "بحث", - "are_you_sure": "هل أنت متأكد؟", + "are_you_sure": "هل أنت متأكد?", "list_is_empty": "القائمة فارغة.", "no_tax_found": "لا يوجد ضريبة!", "four_zero_four": "404", "you_got_lost": "عفواً! يبدو أنك قد تهت!", - "go_home": "الذهاب الى الصفحة الرئيسية", - "test_mail_conf": "اختبار اعدادات البريد", + "go_home": "عودة إلى الرئيسية", + "test_mail_conf": "اختبار تكوين البريد", "send_mail_successfully": "تم إرسال البريد بنجاح", "setting_updated": "تم تحديث الإعدادات بنجاح", "select_state": "اختر الولاية/المنطقة", "select_country": "اختر الدولة", "select_city": "اختر المدينة", "street_1": "عنوان الشارع 1", - "street_2": "الشارع 2", + "street_2": "عنوان الشارع 2", "action_failed": "فشلت العملية", "retry": "أعد المحاولة", "choose_note": "اختر ملاحظة", "no_note_found": "لم يتم العثور على الملاحظة", - "insert_note": "أدخل ملاحظة", - "copied_pdf_url_clipboard": "تم نسخ رابط PDF إلى الحافظة!" + "insert_note": "أدخل ملاحظة" }, "dashboard": { "select_year": "اختر السنة", @@ -104,9 +103,6 @@ "net_income": "صافي الدخل", "year": "اختر السنة" }, - "weekly_invoices": { - "title": "الفواتير الأسبوعية" - }, "monthly_chart": { "title": "المبيعات والنفقات" }, @@ -155,7 +151,7 @@ "phone": "الهاتف", "website": "موقع الإنترنت", "overview": "استعراض", - "enable_portal": "تفعيل البوابة", + "enable_portal": "Enable Portal", "country": "الدولة", "state": "الولاية/المنطقة", "city": "المدينة", @@ -178,8 +174,8 @@ "copy_billing_address": "نسخ من عنوان الفوترة", "no_customers": "لا يوجد عملاء حتى الآن!", "no_customers_found": "لم يتم الحصول على عملاء!", - "no_contact": "ليست هناك جهات اتصال", - "no_contact_name": "اسم جهة الاتصال غير موجود", + "no_contact": "No contact", + "no_contact_name": "No contact name", "list_of_customers": "سوف يحتوي هذا القسم على قائمة العملاء.", "primary_display_name": "اسم العرض الرئيسي", "select_currency": "اختر العملة", @@ -203,7 +199,7 @@ "added_on": "أضيف في", "price": "السعر", "date_of_creation": "تاريخ الإنشاء", - "not_selected": "لم يتم إختيار أي عنصر", + "not_selected": "No item selected", "action": "إجراء", "add_item": "إضافة صنف", "save_item": "حفظ الصنف", @@ -274,7 +270,7 @@ "required": "حقل مطلوب" }, "accepted": "مقبول", - "rejected": "مرفوض", + "rejected": "Rejected", "sent": "مرسل", "draft": "مسودة", "declined": "مرفوض", @@ -295,7 +291,6 @@ "created_message": "تم إنشاء التقدير بنجاح", "updated_message": "تم تحديث التقدير بنجاح", "deleted_message": "تم حذف التقدير بنجاح | تم حذف التقديرات بنجاح", - "user_email_does_not_exist": "البريد الالكتروني للمستخدم غير موجود", "something_went_wrong": "خطأ غير معروف!", "item": { "title": "اسم الصنف", @@ -321,9 +316,9 @@ "all": "الكل", "paid": "مدفوع", "unpaid": "غير مدفوع", - "viewed": "شوهد", + "viewed": "Viewed", "overdue": "Overdue", - "completed": "اكتمل", + "completed": "Completed", "customer": "العميل", "paid_status": "حالة الدفع", "ref_no": "رقم المرجع.", @@ -368,7 +363,7 @@ "select_invoice": "اختر الفاتورة", "no_matching_invoices": "لا يوجد فواتير مطابقة!", "mark_as_sent_successfully": "تم تحديد الفاتورة كمرسلة بنجاح", - "send_invoice_successfully": "تم إرسال الفاتورة بنجاح", + "invoice_sent_successfully": "تم إرسال الفاتورة بنجاح", "cloned_successfully": "تم استنساخ الفاتورة بنجاح", "clone_invoice": "استنساخ الفاتورة", "confirm_clone": "سيتم استنساخ هذه الفاتورة في فاتورة جديدة", @@ -386,39 +381,14 @@ "select_an_item": "اكتب أو انقر لاختيار صنف", "type_item_description": "وصف الصنف (اختياري)" }, - "payment_attached_message": "هناك مدفوعات مرتبطة بالفعل بإحدى الفواتير المحددة. تأكد من حذف المدفوعات المرتبطة أولاً قبل حذف الفاتورة.", "confirm_delete": "لن تتمكن من استرجاع الفاتورة بعد هذه الإجراء | لن تتمكن من استرجاع الفواتير بعد هذا الإجراء", "created_message": "تم إنشاء الفاتورة بنجاح", "updated_message": "تم تحديث الفاتورة بنجاح", "deleted_message": "تم حذف الفاتورة بنجاح | تم حذف الفواتير بنجاح", "marked_as_sent_message": "تم إرسال الفاتورة بنجاح", - "user_email_does_not_exist": "البريد الإلكتروني للمستخدم غير موجود!", "something_went_wrong": "خطأ غير معروف!", "invalid_due_amount_message": "المبلغ النهائي للفاتورة لا يمكن أن يكون أقل من المبلغ المطلوب لها. رجاءاً حدث الفاتورة أو قم بحذف المدفوعات المرتبطة بها للاستمرار." }, - "credit_notes": { - "title": "ملاحظات إئتمانية", - "credit_notes_list": "قائمة الملاحظات الإئتمانية", - "credit_notes": "ملاحظات إئتمانية", - "contact": "تواصل", - "date": "التاريخ", - "amount": "المبلغ المطلوب", - "action": "إجراء", - "credit_number": "الرقم الإئتماني", - "notes": "ملاحظات", - "confirm_delete": "هل تريد حفذف هذه الملاحظة الإئتمانية؟", - "item": { - "title": "اسم الصنف", - "description": "الوصف", - "quantity": "الكمية", - "price": "السعر", - "discount": "الخصم", - "total": "الإجمالي", - "total_discount": "إجمالي الخصم", - "sub_total": "حاصل الجمع", - "tax": "الضريبة" - } - }, "payments": { "title": "المدفوعات", "payments_list": "قائمة المدفوعات", @@ -436,21 +406,20 @@ "edit_payment": "تعديل الدفعة", "view_payment": "عرض الدفعة", "add_new_payment": "إضافة دفعة جديدة", - "send_payment_receipt": "إرسال إيصال الدفع", + "send_payment_receipt": "Send Payment Receipt", "send_payment": "إرسال الدفعة", "save_payment": "حفظ الدفعة", "update_payment": "تحديث الدفعة", "payment": "دفعة | مدفوعات", "no_payments": "لا يوجد مدفوعات حتى الآن!", - "not_selected": "لم يتم تحديد", - "no_invoice": "لا توجد فاتورة", + "not_selected": "Not selected", + "no_invoice": "No invoice", "no_matching_payments": "لا توجد مدفوعات مطابقة!", "list_of_payments": "سوف تحتوي هذه القائمة على مدفوعات الفواتير.", "select_payment_mode": "اختر طريقة الدفع", "confirm_mark_as_sent": "سيتم التحديد كمرسل على هذا التقدير", - "confirm_send_payment": "سيتم إرسال هذه الدفعة عبر البريد الإلكتروني إلى العميل", - "send_payment_successfully": "تم إرسال الدفعة بنجاح", - "user_email_does_not_exist": "البريد الإلكتروني للمستخدم غير موجود!", + "confirm_send_payment": "This payment will be sent via email to the customer", + "send_payment_successfully": "Payment sent successfully", "something_went_wrong": "خطأ غير معروف!", "confirm_delete": "لن تكون قادر على استرجاع هذه الدفعة | لن تكون قادراً على استرجاع هذه المدفوعات", "created_message": "تم إنشاء الدفعة بنجاح", @@ -473,7 +442,7 @@ "receipt": "سند القبض", "amount": "المبلغ المطلوب", "action": "إجراء", - "not_selected": "لم يتم تحديد", + "not_selected": "Not selected", "note": "ملاحظة", "category_id": "رمز الفئة", "date": "تاريخ النفقات", @@ -515,8 +484,7 @@ "password_reset_successfully": "تم إعادة تعيين كلمة المرور بنجاح", "enter_email": "أدخل البريد الالكتروني", "enter_password": "أكتب كلمة المرور", - "retype_password": "أعد كتابة كلمة المرور", - "login_placeholder": "name@example.com" + "retype_password": "أعد كتابة كلمة المرور" }, "users": { "title": "المستخدمون", @@ -751,30 +719,24 @@ "title": "الفواتير", "notes": "ملاحظات", "invoice_prefix": "بادئة رقم الفاتورة", - "invoice_number_length": "طول رقم الفاتورة", "default_invoice_email_body": "نص الفاتورة الافتراضي للبريد الإلكتروني", "invoice_settings": "إعدادات الفاتورة", "autogenerate_invoice_number": "ترقيم آلي للفاتورة", - "invoice_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الفاتورة تلقائيًا في كل مرة تقوم فيها بإنشاء فاتورة جديدة.", - "invoice_email_attachment": "إرسال الفواتير كمرفقات", - "invoice_email_attachment_setting_description": "تفعيل هذا إذا كنت ترغب في إرسال الفواتير كمرفق بريد إلكتروني. يرجى ملاحظة أن زر \"عرض الفواتير\" في رسائل البريد الإلكتروني لن يتم عرضه بعد الآن عند التفعيل.", + "autogenerate_invoice_number_desc": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الفاتورة تلقائيًا في كل مرة تقوم فيها بإنشاء فاتورة جديدة.", "enter_invoice_prefix": "أدخل بادئة رقم الفاتورة", "terms_and_conditions": "الأحكام والشروط", "company_address_format": "تنسيق عنوان الشركة", "shipping_address_format": "تنسيق عنوان الشحن", "billing_address_format": "تنسيق عنوان الفواتير", - "invoice_setting_updated": "تم تحديث إعداد الفاتورة بنجاح" + "invoice_settings_updated": "تم تحديث إعداد الفاتورة بنجاح" }, "estimates": { "title": "التقديرات", "estimate_prefix": "بادئة رقم التقدير", - "estimate_number_length": "تقدير طول العدد", "default_estimate_email_body": "تقدير نص البريد الإلكتروني الافتراضي", "estimate_settings": "إعدادت التقدير", "autogenerate_estimate_number": "ترقيم آلي للتقدير", "estimate_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام التقديرات تلقائيًا في كل مرة تقوم فيها بإنشاء تقدير جديد.", - "estimate_email_attachment": "إرسال التقديرات كمرفقات", - "estimate_email_attachment_setting_description": "تفعيل هذا إذا كنت ترغب في إرسال الفواتير كمرفق بريد إلكتروني. يرجى ملاحظة أن زر \"عرض التقديرات\" في رسائل البريد الإلكتروني لن يتم عرضه بعد الآن عند التفعيل.", "enter_estimate_prefix": "أدخل بادئة رقم التقدير", "estimate_setting_updated": "تم تحديث إعدادات التقدير بنجاح", "company_address_format": "تنسيق عنوان الشركة", @@ -783,15 +745,12 @@ }, "payments": { "title": "المدفوعات", - "description": "أساليب المعاملات المتعلقة بالمدفوعات", + "description": "Modes of transaction for payments", "payment_prefix": "بادئة رقم الدفعة", - "payment_number_length": "طول رقم الدفع", "default_payment_email_body": "نص البريد الإلكتروني للدفع الافتراضي", "payment_settings": "إعدادات الدفعة", "autogenerate_payment_number": "ترقيم آلي للمدفوعات", "payment_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الدفعة تلقائيًا في كل مرة تقوم فيها بإنشاء دفعة جديدة.", - "payment_email_attachment": "إرسال المدفوعات كمرفقات", - "payment_email_attachment_setting_description": "تفعيل هذا إذا كنت ترغب في إرسال الفواتير كمرفق بريد إلكتروني. يرجى ملاحظة أن زر \"عرض المدفوعات\" في رسائل البريد الإلكتروني لن يتم عرضه بعد الآن عند التفعيل.", "enter_payment_prefix": "أدخل بادئة رقم الدفعة", "payment_setting_updated": "تم تحديث إعدادات الدفعة بنجاح", "payment_modes": "طرق الدفع", @@ -820,7 +779,7 @@ }, "notes": { "title": "ملاحظات", - "description": "توفير الوقت عن طريق إنشاء الملاحظات وإعادة استخدامها على الفواتير والتقديرات والمدفوعات.", + "description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", "notes": "ملاحظات", "type": "نوع", "add_note": "اضف ملاحظة", @@ -912,7 +871,7 @@ "updated_message": "تم تحديث التفضيلات بنجاح", "select_language": "اختر اللغة", "select_time_zone": "اختر المنطة الزمنية", - "select_date_format": "اختر صيغة التاريخ", + "select_date_format": "Select Date Format", "select_financial_year": "اختر السنة المالية" }, "update_app": { @@ -921,7 +880,7 @@ "check_update": "تحقق من التحديثات", "avail_update": "تحديث جديد متوفر", "next_version": "النسخة الجديدة", - "requirements": "المتطلبات", + "requirements": "Requirements", "update": "حدث الآن", "update_progress": "قيد التحديث...", "progress_text": "سوف يستغرق التحديث بضع دقائق. يرجى عدم تحديث الشاشة أو إغلاق النافذة قبل انتهاء التحديث", @@ -931,7 +890,6 @@ "download_zip_file": "تنزيل ملف ZIP", "unzipping_package": "حزمة فك الضغط", "copying_files": "نسخ الملفات", - "deleting_files": "حذف الملفات الغير مستخدمة", "running_migrations": "إدارة عمليات الترحيل", "finishing_update": "تحديث التشطيب", "update_failed": "فشل التحديث", @@ -947,7 +905,7 @@ "path": "مسار", "new_disk": "قرص جديد", "created_at": "أنشئت في", - "size": "حجم الملف", + "size": "size", "dropbox": "بصندوق الإسقاط", "local": "محلي", "healthy": "صحي", @@ -957,7 +915,7 @@ "select_disk": "حدد القرص", "action": "عمل", "deleted_message": "تم حذف النسخة الاحتياطية بنجاح", - "created_message": "تم إنشاء النسخة الاحتياطية بنجاح", + "created_message": "Backup created successfully", "invalid_disk_credentials": "بيانات اعتماد غير صالحة للقرص المحدد" }, "disk": { @@ -1001,19 +959,18 @@ "default_driver": "برنامج التشغيل الافتراضي", "is_default": "أمر افتراضي", "set_default_disk": "تعيين القرص الافتراضي", - "set_default_disk_confirm": "سيتم تعيين هذا القرص كالافتراضي وسيتم حفظ جميع ملفات PDF الجديدة على هذا القرص", - "success_set_default_disk": "تم تعيين القرص كالافتراضي بنجاح", + "success_set_default_disk": "Disk set as default successfully", "save_pdf_to_disk": "حفظ ملفات PDF على القرص", "disk_setting_description": "قم بتمكين هذا ، إذا كنت ترغب في حفظ نسخة من كل فاتورة ، تقدير وإيصال دفع PDF على القرص الافتراضي الخاص بك تلقائيًا. سيؤدي تشغيل هذا الخيار إلى تقليل وقت التحميل عند عرض ملفات PDF.", "select_disk": "حدد القرص", "disk_settings": "إعدادات القرص", - "confirm_delete": "لن تتأثر الملفات والمجلدات الموجودة في القرص المحدد ولكن سيتم حذف اعدادات القرص الخاص بك من Crater", + "confirm_delete": "Your existing files & folders in the specified disk will not be affected but your disk configuration will be deleted from Crater", "action": "عمل", - "edit_file_disk": "تعديل قرص الملف", + "edit_file_disk": "Edit File Disk", "success_create": "تمت إضافة القرص بنجاح", - "success_update": "تم تحديث القرص بنجاح", + "success_update": "Disk updated successfully", "error": "فشل إضافة القرص", - "deleted_message": "تم حذف ملف القرص بنجاح", + "deleted_message": "File Disk deleted successfully", "disk_variables_save_successfully": "تم تكوين القرص بنجاح", "disk_variables_save_error": "فشل تكوين القرص.", "invalid_disk_credentials": "بيانات اعتماد غير صالحة للقرص المحدد" @@ -1059,10 +1016,10 @@ "port": "منفذ قاعدة البيانات", "password": "كلمة مرور قاعدة البيانات", "app_url": "عنوان الإنترنت للنظام", - "app_domain": "رابط التطبيق", + "app_domain": "App Domain", "username": "اسم المستخدم لقاعدة البيانات", "db_name": "سم قاعدة البيانات", - "db_path": "مسار قاعدة البيانات", + "db_path": "Database Path", "desc": "قم بإنشاء قاعدة بيانات على الخادم الخاص بك وتعيين بيانات الاعتماد باستخدام النموذج أدناه." }, "permissions": { @@ -1107,18 +1064,10 @@ "database_variables_save_successfully": "تم تكوين قاعدة البيانات بنجاح." } }, - "layout_login": { - "copyright_crater": "حقوق الطبع والنشر @ كريتر - 2020", - "super_simple_invoicing": "فوترة سهلة ومبسطة للغاية", - "for_freelancer": "للمبرمجين المستقلين", - "small_businesses": "والأعال الصغيرة ", - "crater_help": "كريتر يساعدك على تتبع النفقات وتسجيل المدفوعات وإنشاء", - "invoices_and_estimates": "الفواتير والتقديرات مع إمكانية اختيار قوالب متعددة." - }, "validation": { "invalid_phone": "رقم الهاتف غير صحيح", - "invalid_url": "عنوان انترنت غير صحيح (مثال: http://www.crater.com)", - "invalid_domain_url": "عنوان انترنت غير صحيح (مثال: crater.com)", + "invalid_url": "عنوان انترنت غير صحيح (مثال: http://www.craterapp.com)", + "invalid_domain_url": "عنوان انترنت غير صحيح (مثال: craterapp.com)", "required": "حقل مطلوب", "email_incorrect": "بريد الكتروني غير صحيح.", "email_already_taken": "هذا البريد الالكتروني مستخدم مسبقاً", @@ -1144,55 +1093,54 @@ "amount_maxlength": "يجب ألا يزيد المبلغ عن 20 رقماً.", "amount_minvalue": "يجب أن يكون المبلغ أكبر من صفر.", "description_maxlength": "يجب ألا يزيد الوصف عن 255 حرفاً.", - "subject_maxlength": "يجب الا يزيد العنوان عن 100 حرف.", - "message_maxlength": "يجب ألا يزيد حجم النص عن 255 حرف.", + "subject_maxlength": "Subject should not be greater than 100 characters.", + "message_maxlength": "Message should not be greater than 255 characters.", "maximum_options_error": "الحد الأعلى هو {max} خيارات. قم بإزالة أحد الخيارات لتحديد خيار آخر.", "notes_maxlength": "يجب ألا يزيد حجم الملاحظات عن 255 حرفاً.", "address_maxlength": "يجب ألا يزيد العنوان عن 255 حرفاً.", "ref_number_maxlength": "يجب ألا يزيد الرقم المرجعي عن 255 حرفاً.", "prefix_maxlength": "يجب ألا تزيد البادئة عن 5 أحرف.", - "something_went_wrong": "خطأ غير معروف!", - "number_length_minvalue": "يجب أن تكون قيمة الرقم أكبر من الصفر" + "something_went_wrong": "خطأ غير معروف!" }, "pdf_estimate_label": "تقدير", "pdf_estimate_number": "رقم تقدير", "pdf_estimate_date": "تاريخ التقدير", - "pdf_estimate_expire_date": "تاريخ انتهاء الصلاحية", + "pdf_estimate_expire_date": "Expiry date", "pdf_invoice_label": "الفاتورة", "pdf_invoice_number": "رقم الفاتورة", "pdf_invoice_date": "تاريخ الفاتورة", - "pdf_invoice_due_date": "تاريخ الاستحقاق", + "pdf_invoice_due_date": "Due date", "pdf_notes": "ملاحظات", "pdf_items_label": "الأصناف", "pdf_quantity_label": "الكمية", "pdf_price_label": "السعر", "pdf_discount_label": "الخصم", - "pdf_tax_label": "ضريبة", "pdf_amount_label": "المبلغ المطلوب", - "pdf_subtotal": "المجموع الفرعي", + "pdf_subtotal": "Subtotal", "pdf_total": "الإجمالي", - "pdf_payment_label": "الدفع", - "pdf_payment_receipt_label": "ايصال الدفع", - "pdf_payment_date": "تاريخ الدفع", + "pdf_payment_label": "Payment", + "pdf_payment_receipt_label": "PAYMENT RECEIPT", + "pdf_payment_date": "Payment Date", "pdf_payment_number": "رقم الدفعة", "pdf_payment_mode": "نوع الدفعة", - "pdf_payment_amount_received_label": "المبلغ المستلم", - "pdf_expense_report_label": "تقرير المصاريف", - "pdf_total_expenses_label": "مجموع المصاريف", - "pdf_profit_loss_label": "تقرير الارباح و الخسائر", - "pdf_sales_customers_label": "تقرير عملاء المبيعات", - "pdf_sales_items_label": "تقرير عناصر المبيعات", - "pdf_tax_summery_label": "تقرير ملخص الضرائب", - "pdf_income_label": "الايرادات", - "pdf_net_profit_label": "صافي الأرباح", - "pdf_customer_sales_report": "تقرير المبيعات: حسب العميل", - "pdf_total_sales_label": "مجموع المبيعات", - "pdf_item_sales_label": "تقرير المبيعات: حسب البضاعة او الخدمة", - "pdf_tax_report_label": "تقرير الاداءات", - "pdf_total_tax_label": "اجمالي الاداءات", + "pdf_payment_amount_received_label": "Amount Received", + "pdf_expense_report_label": "EXPENSES REPORT", + "pdf_total_expenses_label": "TOTAL EXPENSE", + "pdf_profit_loss_label": "PROFIT & LOSS REPORT", + "pdf_sales_customers_label": "Sales Customer Report", + "pdf_sales_items_label": "Sales Item Report", + "pdf_tax_summery_label": "Tax Summary Report", + "pdf_income_label": "INCOME", + "pdf_net_profit_label": "NET PROFIT", + "pdf_customer_sales_report": "Sales Report: By Customer", + "pdf_total_sales_label": "TOTAL SALES", + "pdf_item_sales_label": "Sales Report: By Item", + "pdf_tax_report_label": "TAX REPORT", + "pdf_total_tax_label": "TOTAL TAX", "pdf_tax_types_label": "أنواع الضرائب", "pdf_expenses_label": "النفقات", "pdf_bill_to": "مطلوب من,", "pdf_ship_to": "يشحن إلى,", - "pdf_received_from": "تم الاستلام من:" + "pdf_received_from": "Received from:", + "pdf_tax_label": "ضريبة" } diff --git a/resources/assets/js/plugins/de.json b/resources/scripts/locales/de.json similarity index 84% rename from resources/assets/js/plugins/de.json rename to resources/scripts/locales/de.json index a7b2f1ea5..a7aa6d5f7 100644 --- a/resources/assets/js/plugins/de.json +++ b/resources/scripts/locales/de.json @@ -4,7 +4,7 @@ "customers": "Kunden", "items": "Artikel", "invoices": "Rechnungen", - "expenses": "Ausgaben", + "expenses": "Kosten", "estimates": "Kostenvoranschläge", "payments": "Zahlungen", "reports": "Berichte", @@ -26,7 +26,7 @@ "from_date": "Von Datum", "to_date": "bis Datum", "from": "Von", - "to": "An", + "to": "bis", "sort_by": "Sortieren nach", "ascending": "Aufsteigend", "descending": "Absteigend", @@ -53,7 +53,7 @@ "tax": "Steuer", "total_amount": "GESAMTSUMME", "bill_to": "Rechnungsempfänger", - "ship_to": "Versand an", + "ship_to": "Versand ein", "due": "Fällig", "draft": "Entwurf", "sent": "Gesendet", @@ -75,19 +75,18 @@ "you_got_lost": "Hoppla! Du hast dich verirrt!", "go_home": "Geh zurück", "test_mail_conf": "E-Mail Konfiguration testen", - "send_mail_successfully": "E-Mail erfolgreich versendet", + "send_mail_successfully": "E-Mail versendet erfolgreich", "setting_updated": "Einstellungen erfolgreich aktualisiert", "select_state": "Bundesland wählen", "select_country": "Land wählen", "select_city": "Stadt wählen", - "street_1": "Straße und Hausnummer", - "street_2": "Adresszusatz", + "street_1": "Straße", + "street_2": "Zusatz Strasse", "action_failed": "Aktion fehlgeschlagen", "retry": "Wiederholen", "choose_note": "Notiz auswählen", "no_note_found": "Keine Notizen gefunden", - "insert_note": "Notiz einfügen", - "copied_pdf_url_clipboard": "Copied PDF url to clipboard!" + "insert_note": "Notiz einfügen" }, "dashboard": { "select_year": "Jahr wählen", @@ -95,20 +94,17 @@ "due_amount": "Offene Beträge", "customers": "Kunden", "invoices": "Rechnungen", - "estimates": "Angebote" + "estimates": "Kostenvoranschläge" }, "chart_info": { "total_sales": "Aufträge gesamt", "total_receipts": "Zahlungen gesamt", - "total_expense": "Ausgaben", + "total_expense": "Kosten gesamt", "net_income": "Einnahmen Netto", "year": "Jahr" }, - "weekly_invoices": { - "title": "Wöchentliche Rechnungen" - }, "monthly_chart": { - "title": "Umsatz & Ausgaben" + "title": "Umsatz & Kosten" }, "recent_invoices_card": { "title": "Fällige Rechnungen", @@ -119,7 +115,7 @@ "view_all": "Alle Anzeigen" }, "recent_estimate_card": { - "title": "Aktuelle Angebote", + "title": "Aktuelle Kostenvoranschläge", "date": "Datum", "customer": "Kunden", "amount_due": "Betrag", @@ -180,7 +176,7 @@ "no_customers_found": "Keine Kunden gefunden!", "no_contact": "Kein Kontakt", "no_contact_name": "Kein Kontaktname", - "list_of_customers": "Dieser Bereich zeigt alle Kunden.", + "list_of_customers": "Dieser Abschnitt enthält die Liste der Kunden.", "primary_display_name": "Primärer Anzeige Name", "select_currency": "Währung wählen", "select_a_customer": "Wählen Sie einen Kunden", @@ -213,8 +209,8 @@ "new_item": "Neuer Artikel", "edit_item": "Artikel bearbeiten", "no_items": "Keine Artikel vorhanden!", - "list_of_items": "Dieser Bereich zeigt alle Artikel.", - "select_a_unit": "Einheit auswählen", + "list_of_items": "Dieser Abschnitt enthält die Liste der Artikel.", + "select_a_unit": "wählen Sie die Einheit", "taxes": "Steuern", "item_attached_message": "Ein Artikel der bereits verwendet wird kann nicht gelöscht werden", "confirm_delete": "Sie können diesen Artikel nicht wiederherstellen | Sie können diese Artikel nicht wiederherstellen", @@ -223,24 +219,24 @@ "deleted_message": "Artikel erfolgreich gelöscht | Artikel erfolgreich gelöscht" }, "estimates": { - "title": "Angebote", - "estimate": "Angebot | Angebote", - "estimates_list": "Angebotsübersicht", + "title": "Kostenvoranschläge", + "estimate": "Kostenvoranschlag | Kostenvoranschläge", + "estimates_list": "Liste Kostenvoranschläge", "days": "{days} Tage", "months": "{months} Monat", "years": "{years} Jahre", "all": "Alle", "paid": "Bezahlt", - "unpaid": "Unbezahlt", + "unpaid": "Unbezahlte", "customer": "KUNDEN", "ref_no": "REF. - NR.", - "number": "NUMMER", + "number": "ANZAHL", "amount_due": "OFFENER BETRAG", "partially_paid": "Teilweise bezahlt", "total": "Gesamt", "discount": "Rabatt", "sub_total": "Zwischensumme", - "estimate_number": "Angebotsnummer", + "estimate_number": "Kostenvoran. Nummer", "ref_number": "Ref-Nummer", "contact": "Kontakt", "add_item": "Fügen Sie ein Artikel hinzu", @@ -251,25 +247,25 @@ "add_tax": "Steuer hinzufügen", "amount": "Summe", "action": "Aktion", - "notes": "Notizen", + "notes": "Hinweise", "tax": "Steuer", "estimate_template": "Vorlage", "convert_to_invoice": "Konvertieren in Rechnung", "mark_as_sent": "Als gesendet markieren", - "send_estimate": "Angebot senden", - "resend_estimate": "Angebot erneut senden", + "send_estimate": "Kostenvoranschlag senden", + "resend_estimate": "Kostenvoranschlag erneut senden", "record_payment": "Zahlung erfassen", - "add_estimate": "Angebote hinzufügen", - "save_estimate": "Angebot speichern", + "add_estimate": "Kostenvoranschlag hinzufügen", + "save_estimate": "Kostenvoranschlag speichern", "confirm_conversion": "Sie möchten, konvertieren Sie diese Schätzung in die Rechnung?", "conversion_message": "Rechnung erfolgreich erstellt", - "confirm_send_estimate": "Das Angebot wird per E-Mail an den Kunden gesendet", - "confirm_mark_as_sent": "Dieses Angebot wird als gesendet markiert", - "confirm_mark_as_accepted": "Dieses Angebot wird als angenommen markiert", - "confirm_mark_as_rejected": "Dieses Angebot wird als abgelehnt markiert", - "no_matching_estimates": "Es gibt keine übereinstimmenden Angebote!", - "mark_as_sent_successfully": "Angebot als gesendet markiert", - "send_estimate_successfully": "Angebot erfolgreich gesendet", + "confirm_send_estimate": "Der Kostenvoranschlag wird per E-Mail an den Kunden gesendet", + "confirm_mark_as_sent": "Dieser Kostenvoranschlag wird als gesendet markiert", + "confirm_mark_as_accepted": "Dieser Kostenvoranschlag wird als angenommen markiert", + "confirm_mark_as_rejected": "Dieser Kostenvoranschlag wird als abgelehnt markiert", + "no_matching_estimates": "Es gibt keine übereinstimmenden Kostenvoranschläge!", + "mark_as_sent_successfully": "Kostenvoranschlag als gesendet markiert.", + "send_estimate_successfully": "Kostenvoranschlag erfolgreich gesendet", "errors": { "required": "Feld ist erforderlich" }, @@ -278,24 +274,23 @@ "sent": "Gesendet", "draft": "Entwurf", "declined": "Abgelehnt", - "new_estimate": "Neues Angebot", - "add_new_estimate": "Neues Angebot hinzufügen", - "update_Estimate": "Angebot aktualisieren", - "edit_estimate": "Angebot ändern", + "new_estimate": "Neuer Kostenvoranschlag", + "add_new_estimate": "Neuen Kostenvoranschlag hinzufügen", + "update_Estimate": "Kostenvoranschlag aktualisieren", + "edit_estimate": "Kostenvoranschlag ändern", "items": "Artikel", - "Estimate": "Angebot | Angebote", + "Estimate": "Kostenvoranschlag | Kostenvoranschläge", "add_new_tax": "neuen Steuersatz hinzufügen", - "no_estimates": "Keine Angebote vorhanden!", - "list_of_estimates": "Dieser Bereich zeigt alle Angebote.", + "no_estimates": "Keine Kostenvoranschläge vorhanden!", + "list_of_estimates": "Dieser Abschnitt enthält die Liste der Kostenvoranschläge.", "mark_as_rejected": "Markiert als abgelehnt", "mark_as_accepted": "Markiert als angenommen", - "marked_as_accepted_message": "Angebot als angenommen markiert", - "marked_as_rejected_message": "Angebot als abgelehnt markiert", - "confirm_delete": "Das Angebot kann nicht wiederhergestellt werden | Die Angebote können nicht wiederhergestellt werden", - "created_message": "Angebot erfolgreich erstellt", - "updated_message": "Angebot erfolgreich aktualisiert", - "deleted_message": "Angebot(e) erfolgreich gelöscht", - "user_email_does_not_exist": "Benutzer-E-Mail nicht vorhanden", + "marked_as_accepted_message": "Kostenvoranschlag als angenommen markiert", + "marked_as_rejected_message": "Kostenvoranschlag als abgelehnt markiert", + "confirm_delete": "Der Kostenvoranschlag kann nicht wiederhergestellt werden | Die Kostenvoranschläge können nicht wiederhergestellt werden", + "created_message": "Kostenvoranschlag erfolgreich erstellt", + "updated_message": "Kostenvoranschlag erfolgreich aktualisiert", + "deleted_message": "Kostenvoranschlag erfolgreich gelöscht | Kostenvoranschläge erfolgreich gelöscht", "something_went_wrong": "Da ging etwas schief", "item": { "title": "Titel", @@ -325,9 +320,9 @@ "overdue": "Überfällig", "completed": "Abgeschlossen", "customer": "KUNDEN", - "paid_status": "ZAHLUNGSSTATUS", + "paid_status": "BEZAHLT-STATUS", "ref_no": "REF. - NR.", - "number": "NUMMER", + "number": "ANZAHL", "amount_due": "OFFENER BETRAG", "partially_paid": "Teilzahlung", "total": "Gesamt", @@ -344,7 +339,7 @@ "add_tax": "Steuersatz hinzufügen", "amount": "Summe", "action": "Aktion", - "notes": "Notizen", + "notes": "Hinweise", "view": "Anzeigen", "send_invoice": "Rechnung senden", "resend_invoice": "Rechnung erneut senden", @@ -364,11 +359,11 @@ "update_invoice": "Rechnung ändern", "add_new_tax": "Neuen Steuersatz hinzufügen", "no_invoices": "Keine Rechnungen vorhanden!", - "list_of_invoices": "Dieser Bereich zeigt alle Rechnungen.", + "list_of_invoices": "Dieser Abschnitt enthält die Liste der Rechnungen.", "select_invoice": "Wählen Sie eine Rechnung", "no_matching_invoices": "Es gibt keine entsprechenden Rechnungen!", "mark_as_sent_successfully": "Rechnung gekennzeichnet als erfolgreich gesendet", - "send_invoice_successfully": "Rechnung erfolgreich versendet", + "invoice_sent_successfully": "Rechnung erfolgreich versendet", "cloned_successfully": "Rechnung erfolgreich kopiert", "clone_invoice": "Rechnung kopieren", "confirm_clone": "Diese Rechnung wird kopiert", @@ -386,39 +381,14 @@ "select_an_item": "Geben Sie oder wählen Sie ein Artikel", "type_item_description": "Artikel Beschreibung (optional)" }, - "payment_attached_message": "Einer der ausgewählten Rechnungen ist bereits eine Zahlung zugeordnet. Stellen Sie sicher, dass Sie zuerst die angehängten Zahlungen löschen, um mit dem Entfernen fortzufahren", "confirm_delete": "Sie können diese Rechnung nicht wiederherstellen. | Sie können diese Rechnungen nicht wiederherstellen.", "created_message": "Rechnung erfolgreich erstellt", "updated_message": "Rechnung erfolgreich aktualisiert", "deleted_message": "Rechnung erfolgreich gelöscht | Rechnungen erfolgreich gelöscht", "marked_as_sent_message": "Rechnung als erfolgreich gesendet markiert", - "user_email_does_not_exist": "Benutzer-E-Mail existiert nicht", "something_went_wrong": "Da ist etwas schief gelaufen", "invalid_due_amount_message": "Der Gesamtrechnungsbetrag darf nicht kleiner sein als der für diese Rechnung bezahlte Gesamtbetrag. Bitte aktualisieren Sie die Rechnung oder löschen Sie die zugehörigen Zahlungen um fortzufahren." }, - "credit_notes": { - "title": "Gutschriften", - "credit_notes_list": "Gutschriften-Liste", - "credit_notes": "Gutschriften", - "contact": "Kontakt", - "date": "Datum", - "amount": "Summe", - "action": "Aktion", - "credit_number": "Kreditkarten-Nummer", - "notes": "Notizen", - "confirm_delete": "Wollen Sie diese Gutschrift löschen?", - "item": { - "title": "Titel", - "description": "Beschreibung", - "quantity": "Menge", - "price": "Preis", - "discount": "Rabatt", - "total": "Gesamt", - "total_discount": "Rabatt Gesamt", - "sub_total": "Zwischensumme", - "tax": "Steuer" - } - }, "payments": { "title": "Zahlungen", "payments_list": "Liste der Zahlungen", @@ -445,12 +415,11 @@ "not_selected": "Nicht ausgewählt", "no_invoice": "Keine Rechnung", "no_matching_payments": "Es gibt keine passenden Zahlungen!", - "list_of_payments": "Dieser Bereich zeigt alle Zahlungen.", + "list_of_payments": "Dieser Abschnitt enthält die Liste der Zahlungen.", "select_payment_mode": "Wählen Sie den Zahlungsmodus", - "confirm_mark_as_sent": "Dieses Angebot wird als gesendet markiert", + "confirm_mark_as_sent": "Dieser Kostenvoranschlag wird als gesendet markiert", "confirm_send_payment": "Diese Zahlung wird per E-Mail an den Kunden gesendet", "send_payment_successfully": "Zahlung erfolgreich gesendet", - "user_email_does_not_exist": "Benutzer-E-Mail existiert nicht", "something_went_wrong": "Da ist etwas schief gelaufen", "confirm_delete": "Sie können diese Zahlung nicht wiederherstellen. | Sie können diese Zahlungen nicht wiederherstellen.", "created_message": "Zahlung erfolgreich erstellt", @@ -459,38 +428,38 @@ "invalid_amount_message": "Zahlungsbetrag ist ungültig" }, "expenses": { - "title": "Ausgaben", - "expenses_list": "Ausgabenübersicht", + "title": "Aufwendungen/Ausgaben", + "expenses_list": "Liste der Ausgaben", "select_a_customer": "Wählen Sie einen Kunden", "expense_title": "Titel", - "customer": "Kunde", + "customer": "Kundin", "contact": "Kontakt", "category": "Kategorie", "from_date": "Von Datum", "to_date": "bis Datum", "expense_date": "Datum", "description": "Beschreibung", - "receipt": "Rechnung", + "receipt": "Eingang", "amount": "Summe", - "action": "Aktion", "not_selected": "Nicht ausgewählt", + "action": "Aktion", "note": "Hinweis", "category_id": "Kategorie-Id", - "date": "Ausgabedatum", - "add_expense": "Ausgabe hinzufügen", - "add_new_expense": "Neue Ausgabe hinzufügen", - "save_expense": "Ausgabe speichern", - "update_expense": "Ausgabe aktualisieren", + "date": "Aufwandsdatum", + "add_expense": "Aufwendung hinzufügen", + "add_new_expense": "Neue Aufwendung hinzufügen", + "save_expense": "Aufwendung speichern", + "update_expense": "Aufwendung aktualisieren", "download_receipt": "Quittung herunterladen", - "edit_expense": "Ausgabe bearbeiten", - "new_expense": "Neue Ausgabe", - "expense": "Ausgabe | Ausgaben", + "edit_expense": "Aufwendung ändern", + "new_expense": "Neue Aufwendung", + "expense": "Aufwendung | Aufwendungen", "no_expenses": "Noch keine Ausgaben!", - "list_of_expenses": "Dieser Bereich enthält alle Ausgaben.", + "list_of_expenses": "Dieser Abschnitt enthält die Liste der Ausgaben.", "confirm_delete": "Sie können diese Ausgabe nicht wiederherstellen. | Sie können diese Ausgaben nicht wiederherstellen.", - "created_message": "Ausgabe erfolgreich erstellt", - "updated_message": "Ausgabe erfolgreich aktualisiert", - "deleted_message": "Ausgabe erfolgreich gelöscht | Ausgaben erfolgreich gelöscht", + "created_message": "Aufwand erfolgreich erstellt", + "updated_message": "Aufwand erfolgreich aktualisiert", + "deleted_message": "Aufwand erfolgreich gelöscht | Aufwand erfolgreich gelöscht", "categories": { "categories_list": "Liste der Kategorien", "title": "Titel", @@ -515,8 +484,7 @@ "password_reset_successfully": "Passwort erfolgreich zurückgesetzt", "enter_email": "Geben Sie Ihre E-Mail ein", "enter_password": "Geben Sie das Passwort ein", - "retype_password": "Passwort bestätigen", - "login_placeholder": "mail@beispiel.de" + "retype_password": "Passwort bestätigen" }, "users": { "title": "Benutzer", @@ -534,7 +502,7 @@ "new_user": "Neuer Benutzer", "edit_user": "Benutzer bearbeiten", "no_users": "Noch keine Benutzer!", - "list_of_users": "Dieser Bereich zeigt alle Benutzer.", + "list_of_users": "Dieser Abschnitt enthält die Liste der Benutzer.", "email": "E-Mail", "phone": "Telefon", "password": "Passwort", @@ -586,17 +554,17 @@ "status": "Status" }, "estimates": { - "estimate": "Angebot", - "estimate_date": "Angebotsdatum", + "estimate": "Kostenvoranschlag", + "estimate_date": "Datum Kostenvoranschlag", "due_date": "Fälligkeit", - "estimate_number": "Angebotsnummer", + "estimate_number": "Kostenvoranschlag-Nr.", "ref_number": "Ref-Nummer", "amount": "Summe", "contact_name": "Ansprechpartner", "status": "Status" }, "expenses": { - "expenses": "Ausgaben", + "expenses": "Aufwendungen", "category": "Kategorie", "date": "Datum", "amount": "Summe", @@ -609,7 +577,7 @@ "menu_title": { "account_settings": "Konto-Einstellungen", "company_information": "Informationen zum Unternehmen", - "customization": "Personalisierung", + "customization": "Anpassung", "preferences": "Einstellungen", "notifications": "Benachrichtigungen", "tax_types": "Steuersätze", @@ -619,7 +587,7 @@ "file_disk": "Dateispeicher", "custom_fields": "Benutzerdefinierte Felder", "payment_modes": "Zahlungsarten", - "notes": "Notizen" + "notes": "Hinweise" }, "title": "Einstellungen", "setting": "Einstellung | Einstellungen", @@ -673,7 +641,7 @@ "company_info": "Firmeninfo", "company_name": "Name des Unternehmens", "company_logo": "Firmenlogo", - "section_description": "Informationen zu Ihrem Unternehmen, die auf Rechnungen, Angeboten und anderen von Crater erstellten Dokumenten angezeigt werden.", + "section_description": "Informationen zu Ihrem Unternehmen, die auf Rechnungen, Kostenvoranschlägen und anderen von Crater erstellten Dokumenten angezeigt werden.", "phone": "Telefon", "country": "Land", "state": "Bundesland", @@ -689,7 +657,7 @@ "add_custom_field": "Benutzerdefiniertes Feld hinzufügen", "edit_custom_field": "Benutzerdefiniertes Feld bearbeiten", "field_name": "Feldname", - "label": "Bezeichnung", + "label": "Etikette", "type": "Art", "name": "Name", "required": "Erforderlich", @@ -703,7 +671,7 @@ "suffix": "Vorzeichen", "yes": "Ja", "no": "Nein", - "order": "Reihenfolge", + "order": "Auftrag", "custom_field_confirm_delete": "Sie können dieses benutzerdefinierte Feld nicht wiederherstellen", "already_in_use": "Benutzerdefiniertes Feld wird bereits verwendet", "deleted_message": "Benutzerdefiniertes Feld erfolgreich gelöscht", @@ -720,7 +688,7 @@ "added_message": "Benutzerdefiniertes Feld erfolgreich hinzugefügt" }, "customization": { - "customization": "Personalisierung", + "customization": "Anpassung", "save": "Speichern", "addresses": { "title": "Adressen", @@ -740,8 +708,8 @@ "state": "Bundesland", "city": "Stadt", "company_name": "Name des Unternehmens", - "address_street_1": "Straße und Hausnummer", - "address_street_2": "Adresszusatz", + "address_street_1": "Strasse", + "address_street_2": "Zusatz Strasse", "phone": "Telefon", "zip_code": "PLZ", "address_setting_updated": "Adresse-Einstellung erfolgreich aktualisiert" @@ -749,34 +717,30 @@ "updated_message": "Unternehmensinformationen wurden erfolgreich aktualisiert", "invoices": { "title": "Rechnungen", - "notes": "Notizen", + "notes": "Hinweise", "invoice_prefix": "Rechnung Präfix", "invoice_number_length": "Rechnungsnummerlänge", "default_invoice_email_body": "Standard Rechnung E-Mail Inhalt", "invoice_settings": "Rechnungseinstellungen", "autogenerate_invoice_number": "Rechnungsnummer automatisch generieren", - "invoice_setting_description": "Deaktivieren Sie diese Option, wenn Sie Rechnungsnummern nicht jedes Mal automatisch generieren möchten, wenn Sie eine neue Rechnung erstellen.", - "invoice_email_attachment": "Send invoices as attachments", - "invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.", + "autogenerate_invoice_number_desc": "Deaktivieren Sie diese Option, wenn Sie Rechnungsnummern nicht jedes Mal automatisch generieren möchten, wenn Sie eine neue Rechnung erstellen.", "enter_invoice_prefix": "Rechnungspräfix eingeben", "terms_and_conditions": "Allgemeine Geschäftsbedingungen", "company_address_format": "Firmenadressformat", "shipping_address_format": "Versandadressen Format", "billing_address_format": "Rechnungsadressen Format", - "invoice_setting_updated": "Rechnungseinstellung erfolgreich aktualisiert" + "invoice_settings_updated": "Rechnungseinstellung erfolgreich aktualisiert" }, "estimates": { - "title": "Angebote", - "estimate_prefix": "Angebotspräfix", + "title": "Kostenvoranschläge", + "estimate_prefix": "Kostenvoranschlag Präfix", "estimate_number_length": "Angebotsnummerlänge", "default_estimate_email_body": "Rechnung - E-Mail Text", - "estimate_settings": "Einstellungen Angebot", - "autogenerate_estimate_number": "Angebotsnummer automatisch generieren", - "estimate_setting_description": "Deaktivieren Sie diese Option, wenn Sie nicht jedes Mal, wenn Sie ein neues Angebot erstellen, automatisch eine Angebotsnummer generieren möchten.", - "estimate_email_attachment": "Send estimates as attachments", - "estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.", - "enter_estimate_prefix": "Geben Sie das Angebotspräfix ein", - "estimate_setting_updated": "Angebotseinstellungen erfolgreich aktualisiert", + "estimate_settings": "Einstellungen Kostenvoranschlag", + "autogenerate_estimate_number": "Kostenvoranschlagsnummer automatisch generieren", + "estimate_setting_description": "Deaktivieren Sie diese Option, wenn Sie nicht jedes Mal, wenn Sie einen neue Kostenvoranschlag erstellen, automatisch eine Schätzung generieren möchten.", + "enter_estimate_prefix": "Geben Sie das Kostenvoranschlag Präfix ein", + "estimate_setting_updated": "Einstellungen Kostenvoranschläge erfolgreich aktualisiert", "company_address_format": "Firmenadresse Format", "billing_address_format": "Rechnungsadressen Format", "shipping_address_format": "Versandadressen Format" @@ -790,8 +754,6 @@ "payment_settings": "Zahlung Einstellungen", "autogenerate_payment_number": "Zahlungsnummer automatisch generieren", "payment_setting_description": "Deaktivieren Sie diese Option, wenn Sie nicht jedes Mal, wenn Sie eine neue Zahlung erstellen, automatisch Zahlungsnummern generieren möchten.", - "payment_email_attachment": "Send payments as attachments", - "payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.", "enter_payment_prefix": "Zahlungspräfix eingeben", "payment_setting_updated": "Zahlungseinstellung erfolgreich aktualisiert", "payment_modes": "Zahlungsarten", @@ -819,8 +781,8 @@ "deleted_message": "Artikeleinheit erfolgreich gelöscht" }, "notes": { - "title": "Notizen", - "description": "Sparen Sie Zeit, indem Sie Notizen erstellen und diese auf Ihren Rechnungen, Angeboten und Zahlungen wiederverwenden.", + "title": "Hinweise", + "description": "Sparen Sie Zeit, indem Sie Notizen erstellen und diese auf Ihren Rechnungen, Kostenvoranschlägen und Zahlungen wiederverwenden.", "notes": "Hinweise", "type": "Art", "add_note": "Notiz hinzufügen", @@ -857,8 +819,8 @@ "description": "Welche E-Mail-Benachrichtigungen möchten Sie erhalten wenn sich etwas ändert?", "invoice_viewed": "Rechnung angezeigt", "invoice_viewed_desc": "Wenn Ihr Kunde die gesendete Rechnung anzeigt bekommt.", - "estimate_viewed": "Angebot angesehen", - "estimate_viewed_desc": "Wenn Ihr Kunde das gesendete Angebot anzeigt bekommt.", + "estimate_viewed": "Kostenvoranschlag angesehen", + "estimate_viewed_desc": "Wenn Ihr Kunde den gesendeten Kostenvoranschlag anzeigt bekommt.", "save": "Speichern", "email_save_message": "Email erfolgreich gespeichert", "please_enter_email": "Bitte E-Mail eingeben" @@ -883,7 +845,7 @@ "already_in_use": "Steuersatz wird bereits verwendet" }, "expense_category": { - "title": "Ausgabenkategorien", + "title": "Kategorien Kosten", "action": "Aktion", "description": "Für das Hinzufügen von Ausgabeneinträgen sind Kategorien erforderlich. Sie können diese Kategorien nach Ihren Wünschen hinzufügen oder entfernen.", "add_new_category": "Neue Kategorie hinzufügen", @@ -931,7 +893,6 @@ "download_zip_file": "Laden Sie die ZIP-Datei herunter", "unzipping_package": "Paket entpacken", "copying_files": "Dateien kopieren", - "deleting_files": "Deleting Unused files", "running_migrations": "Ausführen von Migrationen", "finishing_update": "Update beenden", "update_failed": "Update fehlgeschlagen", @@ -992,24 +953,23 @@ "do_spaces_bucket": "Do Spaces Bucket", "do_spaces_endpoint": "Do Spaces Endpoint", "do_spaces_root": "Do Spaces Root", - "dropbox_type": "Dropbox Typ", + "dropbox_type": "Dropbox Type", "dropbox_token": "Dropbox Token", - "dropbox_key": "Dropbox Schlüssel", + "dropbox_key": "Dropbox Key", "dropbox_secret": "Dropbox Secret", "dropbox_app": "Dropbox App", "dropbox_root": "Dropbox Root", "default_driver": "Standard-Treiber", "is_default": "Standard", "set_default_disk": "Als Standard festlegen", - "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk", "success_set_default_disk": "Speicher wurde als Standard festgelegt", "save_pdf_to_disk": "PDFs auf Festplatte speichern", - "disk_setting_description": " Aktivieren Sie dies, um eine Kopie von jeder Rechnung, jedem Angebot & jeder Zahlung als PDF automatisch auf ihrem Standard-Speicher abzulegen. Wenn Sie diese Option aktivieren, verringert sich die Ladezeit beim Betrachten der PDFs.", + "disk_setting_description": " Aktivieren Sie dies, um eine Kopie von jeder Rechnung, jedem Kostenvoranschlag & jedem Zahlungsbelegung als PDF automatisch auf ihrem Standard-Speicher abzulegen. Wenn Sie diese Option aktivieren, verringert sich die Ladezeit beim Betrachten der PDFs.", "select_disk": "Speicherort auswählen", "disk_settings": "Speichermedienkonfiguration", "confirm_delete": "Ihre existierenden Dateien und Ordner auf der angegebenen Festplatte werden nicht beeinflusst, aber Dieser Speicherort wird aus Crater gelöscht", "action": "Aktion", - "edit_file_disk": "Speicherort editieren", + "edit_file_disk": "Edit File Disk", "success_create": "Speicher erfolgreich hinzugefügt", "success_update": "Speicher erfolgreich bearbeitet", "error": "Hinzufügen des Speichers gescheitert", @@ -1107,18 +1067,10 @@ "database_variables_save_successfully": "Datenbank erfolgreich konfiguriert." } }, - "layout_login": { - "copyright_crater": "Copyright @ Crater - 2020", - "super_simple_invoicing": "Super einfache Buchhaltung", - "for_freelancer": "für Freelancers &", - "small_businesses": "kleine Unternehmen", - "crater_help": "Crater hilft dir eine wunderschönen Überblick über deine Buchhaltung zuhaben.", - "invoices_and_estimates": "Die Möglichkeit mehrere Versionen von Rechnungen und Kosten zuerstellen." - }, "validation": { "invalid_phone": "Ungültige Telefonnummer", - "invalid_url": "Ungültige URL (Bsp.: http://www.crater.com)", - "invalid_domain_url": "Ungültige URL (Bsp.: crater.com)", + "invalid_url": "Ungültige URL (Bsp.: http://www.craterapp.com)", + "invalid_domain_url": "Ungültige URL (Bsp.: craterapp.com)", "required": "Feld ist erforderlich", "email_incorrect": "Falsche E-Mail.", "email_already_taken": "Die E-Mail ist bereits vergeben.", @@ -1154,9 +1106,9 @@ "something_went_wrong": "Da ist etwas schief gelaufen", "number_length_minvalue": "Nummernlänge sollte größer als 0 sein" }, - "pdf_estimate_label": "Angebot", - "pdf_estimate_number": "Angebotsnummer", - "pdf_estimate_date": "Angebotsdatum", + "pdf_estimate_label": "Kostenvoranschlag", + "pdf_estimate_number": "Kostenvoran. Nummer", + "pdf_estimate_date": "Datum Kostenvoranschlag", "pdf_estimate_expire_date": "Ablaufdatum", "pdf_invoice_label": "Rechnung", "pdf_invoice_number": "Rechnungsnummer", @@ -1167,7 +1119,6 @@ "pdf_quantity_label": "Menge", "pdf_price_label": "Preis", "pdf_discount_label": "Rabatt", - "pdf_tax_label": "Steuer", "pdf_amount_label": "Summe", "pdf_subtotal": "Zwischensumme", "pdf_total": "Gesamt", @@ -1191,8 +1142,9 @@ "pdf_tax_report_label": "Umsatzsteuer BERICHT", "pdf_total_tax_label": "Gesamte Umsatzsteuer", "pdf_tax_types_label": "Steuersätze", - "pdf_expenses_label": "Ausgaben", - "pdf_bill_to": "Rechnungsempfänger:", - "pdf_ship_to": "Versand an:", - "pdf_received_from": "Erhalten von:" + "pdf_expenses_label": "Gesamtausgaben", + "pdf_bill_to": "Rechnungsempfänger,", + "pdf_ship_to": "Versand an,", + "pdf_received_from": "Erhalten von:", + "pdf_tax_label": "Skat" } diff --git a/resources/scripts/locales/en.json b/resources/scripts/locales/en.json new file mode 100644 index 000000000..42aca27c1 --- /dev/null +++ b/resources/scripts/locales/en.json @@ -0,0 +1,1429 @@ +{ + "navigation": { + "dashboard": "Dashboard", + "customers": "Customers", + "items": "Items", + "invoices": "Invoices", + "recurring-invoices": "Recurring Invoices", + "expenses": "Expenses", + "estimates": "Estimates", + "payments": "Payments", + "reports": "Reports", + "settings": "Settings", + "logout": "Logout", + "users": "Users" + }, + "general": { + "add_company": "Add Company", + "view_pdf": "View PDF", + "copy_pdf_url": "Copy PDF Url", + "download_pdf": "Download PDF", + "save": "Save", + "create": "Create", + "cancel": "Cancel", + "update": "Update", + "deselect": "Deselect", + "download": "Download", + "from_date": "From Date", + "to_date": "To Date", + "from": "From", + "to": "To", + "ok": "Ok", + "yes": "Yes", + "no": "No", + "sort_by": "Sort By", + "ascending": "Ascending", + "descending": "Descending", + "subject": "Subject", + "body": "Body", + "message": "Message", + "send": "Send", + "preview": "Preview", + "go_back": "Go Back", + "back_to_login": "Back to Login?", + "home": "Home", + "filter": "Filter", + "delete": "Delete", + "edit": "Edit", + "view": "View", + "add_new_item": "Add New Item", + "clear_all": "Clear All", + "showing": "Showing", + "of": "of", + "actions": "Actions", + "subtotal": "SUBTOTAL", + "discount": "DISCOUNT", + "fixed": "Fixed", + "percentage": "Percentage", + "tax": "TAX", + "total_amount": "TOTAL AMOUNT", + "bill_to": "Bill to", + "ship_to": "Ship to", + "due": "Due", + "draft": "Draft", + "sent": "Sent", + "all": "All", + "select_all": "Select All", + "select_template": "Select Template", + "choose_file": "Click here to choose a file", + "choose_template": "Choose a template", + "choose": "Choose", + "remove": "Remove", + "select_a_status": "Select a status", + "select_a_tax": "Select a tax", + "search": "Search", + "are_you_sure": "Are you sure?", + "list_is_empty": "List is empty.", + "no_tax_found": "No tax found!", + "four_zero_four": "404", + "you_got_lost": "Whoops! You got Lost!", + "go_home": "Go Home", + "test_mail_conf": "Test Mail Configuration", + "send_mail_successfully": "Mail sent successfully", + "setting_updated": "Setting updated successfully", + "select_state": "Select state", + "select_country": "Select Country", + "select_city": "Select City", + "street_1": "Street 1", + "street_2": "Street 2", + "action_failed": "Action Failed", + "retry": "Retry", + "choose_note": "Choose Note", + "no_note_found": "No Note Found", + "insert_note": "Insert Note", + "copied_pdf_url_clipboard": "Copied PDF url to clipboard!", + "docs": "Docs", + "do_you_wish_to_continue": "Do you wish to continue?", + "note": "Note" + }, + "dashboard": { + "select_year": "Select year", + "cards": { + "due_amount": "Amount Due", + "customers": "Customers", + "invoices": "Invoices", + "estimates": "Estimates" + }, + "chart_info": { + "total_sales": "Sales", + "total_receipts": "Receipts", + "total_expense": "Expenses", + "net_income": "Net Income", + "year": "Select year" + }, + "monthly_chart": { + "title": "Sales & Expenses" + }, + "recent_invoices_card": { + "title": "Due Invoices", + "due_on": "Due On", + "customer": "Customer", + "amount_due": "Amount Due", + "actions": "Actions", + "view_all": "View All" + }, + "recent_estimate_card": { + "title": "Recent Estimates", + "date": "Date", + "customer": "Customer", + "amount_due": "Amount Due", + "actions": "Actions", + "view_all": "View All" + } + }, + "tax_types": { + "name": "Name", + "description": "Description", + "percent": "Percent", + "compound_tax": "Compound Tax" + }, + "global_search": { + "search": "Search...", + "customers": "Customers", + "users": "Users", + "no_results_found": "No Results Found" + }, + "company_switcher": { + "label": "SWITCH COMPANY", + "no_results_found": "No Results Found", + "add_new_company": "Add new company", + "new_company": "New company", + "created_message": "Company created successfully" + }, + "dateRange": { + "today": "Today", + "this_week": "This Week", + "this_month": "This Month", + "this_quarter": "This Quarter", + "this_year": "This Year", + "previous_week": "Previous Week", + "previous_month": "Previous Month", + "previous_quarter": "Previous Quarter", + "previous_year": "Previous Year", + "custom": "Custom" + }, + "customers": { + "title": "Customers", + "prefix": "Prefix", + "add_customer": "Add Customer", + "contacts_list": "Customer List", + "name": "Name", + "mail": "Mail | Mails", + "statement": "Statement", + "display_name": "Display Name", + "primary_contact_name": "Primary Contact Name", + "contact_name": "Contact Name", + "amount_due": "Amount Due", + "email": "Email", + "address": "Address", + "phone": "Phone", + "website": "Website", + "overview": "Overview", + "invoice_prefix": "Invoice Prefix", + "estimate_prefix": "Estimate Prefix", + "payment_prefix": "Payment Prefix", + "enable_portal": "Enable Portal", + "country": "Country", + "state": "State", + "city": "City", + "zip_code": "Zip Code", + "added_on": "Added On", + "action": "Action", + "password": "Password", + "confirm_password": "Confirm Password", + "street_number": "Street Number", + "primary_currency": "Primary Currency", + "description": "Description", + "add_new_customer": "Add New Customer", + "save_customer": "Save Customer", + "update_customer": "Update Customer", + "customer": "Customer | Customers", + "new_customer": "New Customer", + "edit_customer": "Edit Customer", + "basic_info": "Basic Info", + "billing_address": "Billing Address", + "shipping_address": "Shipping Address", + "copy_billing_address": "Copy from Billing", + "no_customers": "No customers yet!", + "no_customers_found": "No customers found!", + "no_contact": "No contact", + "no_contact_name": "No contact name", + "list_of_customers": "This section will contain the list of customers.", + "primary_display_name": "Primary Display Name", + "select_currency": "Select currency", + "select_a_customer": "Select a customer", + "type_or_click": "Type or click to select", + "new_transaction": "New Transaction", + "no_matching_customers": "There are no matching customers!", + "phone_number": "Phone Number", + "create_date": "Create Date", + "confirm_delete": "You will not be able to recover this customer and all the related Invoices, Estimates and Payments. | You will not be able to recover these customers and all the related Invoices, Estimates and Payments.", + "created_message": "Customer created successfully", + "updated_message": "Customer updated successfully", + "deleted_message": "Customer deleted successfully | Customers deleted successfully", + "edit_currency_not_allowed": "Cannot change currency once transactions created." + }, + "items": { + "title": "Items", + "items_list": "Items List", + "name": "Name", + "unit": "Unit", + "description": "Description", + "added_on": "Added On", + "price": "Price", + "date_of_creation": "Date Of Creation", + "not_selected": "No item selected", + "action": "Action", + "add_item": "Add Item", + "save_item": "Save Item", + "update_item": "Update Item", + "item": "Item | Items", + "add_new_item": "Add New Item", + "new_item": "New Item", + "edit_item": "Edit Item", + "no_items": "No items yet!", + "list_of_items": "This section will contain the list of items.", + "select_a_unit": "select unit", + "taxes": "Taxes", + "item_attached_message": "Cannot delete an item which is already in use", + "confirm_delete": "You will not be able to recover this Item | You will not be able to recover these Items", + "created_message": "Item created successfully", + "updated_message": "Item updated successfully", + "deleted_message": "Item deleted successfully | Items deleted successfully" + }, + "estimates": { + "title": "Estimates", + "estimate": "Estimate | Estimates", + "estimates_list": "Estimates List", + "days": "{days} Days", + "months": "{months} Month", + "years": "{years} Year", + "all": "All", + "paid": "Paid", + "unpaid": "Unpaid", + "customer": "CUSTOMER", + "ref_no": "REF NO.", + "number": "NUMBER", + "amount_due": "AMOUNT DUE", + "partially_paid": "Partially Paid", + "total": "Total", + "discount": "Discount", + "sub_total": "Sub Total", + "estimate_number": "Estimate Number", + "ref_number": "Ref Number", + "contact": "Contact", + "add_item": "Add an Item", + "date": "Date", + "due_date": "Due Date", + "expiry_date": "Expiry Date", + "status": "Status", + "add_tax": "Add Tax", + "amount": "Amount", + "action": "Action", + "notes": "Notes", + "tax": "Tax", + "estimate_template": "Template", + "convert_to_invoice": "Convert to Invoice", + "mark_as_sent": "Mark as Sent", + "send_estimate": "Send Estimate", + "resend_estimate": "Resend Estimate", + "record_payment": "Record Payment", + "add_estimate": "Add Estimate", + "save_estimate": "Save Estimate", + "confirm_conversion": "This estimate will be used to create a new Invoice.", + "conversion_message": "Invoice created successful", + "confirm_send_estimate": "This estimate will be sent via email to the customer", + "confirm_mark_as_sent": "This estimate will be marked as sent", + "confirm_mark_as_accepted": "This estimate will be marked as Accepted", + "confirm_mark_as_rejected": "This estimate will be marked as Rejected", + "no_matching_estimates": "There are no matching estimates!", + "mark_as_sent_successfully": "Estimate marked as sent successfully", + "send_estimate_successfully": "Estimate sent successfully", + "errors": { + "required": "Field is required" + }, + "accepted": "Accepted", + "rejected": "Rejected", + "sent": "Sent", + "draft": "Draft", + "declined": "Declined", + "new_estimate": "New Estimate", + "add_new_estimate": "Add New Estimate", + "update_Estimate": "Update Estimate", + "edit_estimate": "Edit Estimate", + "items": "items", + "Estimate": "Estimate | Estimates", + "add_new_tax": "Add New Tax", + "no_estimates": "No estimates yet!", + "list_of_estimates": "This section will contain the list of estimates.", + "mark_as_rejected": "Mark as rejected", + "mark_as_accepted": "Mark as accepted", + "marked_as_accepted_message": "Estimate marked as accepted", + "marked_as_rejected_message": "Estimate marked as rejected", + "confirm_delete": "You will not be able to recover this Estimate | You will not be able to recover these Estimates", + "created_message": "Estimate created successfully", + "updated_message": "Estimate updated successfully", + "deleted_message": "Estimate deleted successfully | Estimates deleted successfully", + "something_went_wrong": "something went wrong", + "item": { + "title": "Item Title", + "description": "Description", + "quantity": "Quantity", + "price": "Price", + "discount": "Discount", + "total": "Total", + "total_discount": "Total Discount", + "sub_total": "Sub Total", + "tax": "Tax", + "amount": "Amount", + "select_an_item": "Type or click to select an item", + "type_item_description": "Type Item Description (optional)" + } + }, + "invoices": { + "title": "Invoices", + "invoices_list": "Invoices List", + "days": "{days} Days", + "months": "{months} Month", + "years": "{years} Year", + "all": "All", + "paid": "Paid", + "unpaid": "Unpaid", + "viewed": "Viewed", + "overdue": "Overdue", + "completed": "Completed", + "customer": "CUSTOMER", + "paid_status": "PAID STATUS", + "ref_no": "REF NO.", + "number": "NUMBER", + "amount_due": "AMOUNT DUE", + "partially_paid": "Partially Paid", + "total": "Total", + "discount": "Discount", + "sub_total": "Sub Total", + "invoice": "Invoice | Invoices", + "invoice_number": "Invoice Number", + "ref_number": "Ref Number", + "contact": "Contact", + "add_item": "Add an Item", + "date": "Date", + "due_date": "Due Date", + "status": "Status", + "add_tax": "Add Tax", + "amount": "Amount", + "action": "Action", + "notes": "Notes", + "view": "View", + "send_invoice": "Send Invoice", + "resend_invoice": "Resend Invoice", + "invoice_template": "Invoice Template", + "conversion_message": "Invoice cloned successful", + "template": "Select Template", + "mark_as_sent": "Mark as sent", + "confirm_send_invoice": "This invoice will be sent via email to the customer", + "invoice_mark_as_sent": "This invoice will be marked as sent", + "confirm_mark_as_accepted": "This invoice will be marked as Accepted", + "confirm_mark_as_rejected": "This invoice will be marked as Rejected", + "confirm_send": "This invoice will be sent via email to the customer", + "invoice_date": "Invoice Date", + "record_payment": "Record Payment", + "add_new_invoice": "Add New Invoice", + "update_expense": "Update Expense", + "edit_invoice": "Edit Invoice", + "new_invoice": "New Invoice", + "save_invoice": "Save Invoice", + "update_invoice": "Update Invoice", + "add_new_tax": "Add New Tax", + "no_invoices": "No Invoices yet!", + "mark_as_rejected": "Mark as rejected", + "mark_as_accepted": "Mark as accepted", + "list_of_invoices": "This section will contain the list of invoices.", + "select_invoice": "Select Invoice", + "no_matching_invoices": "There are no matching invoices!", + "mark_as_sent_successfully": "Invoice marked as sent successfully", + "invoice_sent_successfully": "Invoice sent successfully", + "cloned_successfully": "Invoice cloned successfully", + "clone_invoice": "Clone Invoice", + "confirm_clone": "This invoice will be cloned into a new Invoice", + "item": { + "title": "Item Title", + "description": "Description", + "quantity": "Quantity", + "price": "Price", + "discount": "Discount", + "total": "Total", + "total_discount": "Total Discount", + "sub_total": "Sub Total", + "tax": "Tax", + "amount": "Amount", + "select_an_item": "Type or click to select an item", + "type_item_description": "Type Item Description (optional)" + }, + "payment_attached_message": "One of the selected invoices already have a payment attached to it. Make sure to delete the attached payments first in order to go ahead with the removal", + "confirm_delete": "You will not be able to recover this Invoice | You will not be able to recover these Invoices", + "created_message": "Invoice created successfully", + "updated_message": "Invoice updated successfully", + "deleted_message": "Invoice deleted successfully | Invoices deleted successfully", + "marked_as_sent_message": "Invoice marked as sent successfully", + "something_went_wrong": "something went wrong", + "invalid_due_amount_message": "Total Invoice amount cannot be less than total paid amount for this Invoice. Please update the invoice or delete the associated payments to continue." + }, + "recurring_invoices": { + "title": "Recurring Invoices", + "invoices_list": "Recurring Invoices List", + "days": "{days} Days", + "months": "{months} Month", + "years": "{years} Year", + "all": "All", + "paid": "Paid", + "unpaid": "Unpaid", + "viewed": "Viewed", + "overdue": "Overdue", + "active": "Active", + "completed": "Completed", + "customer": "CUSTOMER", + "paid_status": "PAID STATUS", + "ref_no": "REF NO.", + "number": "NUMBER", + "amount_due": "AMOUNT DUE", + "partially_paid": "Partially Paid", + "total": "Total", + "discount": "Discount", + "sub_total": "Sub Total", + "invoice": "Recurring Invoice | Recurring Invoices", + "invoice_number": "Recurring Invoice Number", + "next_invoice_date": "Next Invoice Date", + "ref_number": "Ref Number", + "contact": "Contact", + "add_item": "Add an Item", + "date": "Date", + "limit_by": "Limit by", + "limit_date": "Limit Date", + "limit_count": "Limit Count", + "count": "Count", + "status": "Status", + "select_a_status": "Select a status", + "working": "Working", + "on_hold": "On Hold", + "complete": "Completed", + "add_tax": "Add Tax", + "amount": "Amount", + "action": "Action", + "notes": "Notes", + "view": "View", + "basic_info": "Basic Info", + "send_invoice": "Send Recurring Invoice", + "auto_send": "Auto Send", + "resend_invoice": "Resend Recurring Invoice", + "invoice_template": "Recurring Invoice Template", + "conversion_message": "Recurring Invoice cloned successful", + "template": "Template", + "mark_as_sent": "Mark as sent", + "confirm_send_invoice": "This recurring invoice will be sent via email to the customer", + "invoice_mark_as_sent": "This recurring invoice will be marked as sent", + "confirm_send": "This recurring invoice will be sent via email to the customer", + "starts_at": "Start Date", + "due_date": "Invoice Due Date", + "record_payment": "Record Payment", + "add_new_invoice": "Add New Recurring Invoice", + "update_expense": "Update Expense", + "edit_invoice": "Edit Recurring Invoice", + "new_invoice": "New Recurring Invoice", + "send_automatically": "Send Automatically", + "send_automatically_desc": "Enable this, if you would like to send the invoice automatically to the customer when its created.", + "save_invoice": "Save Recurring Invoice", + "update_invoice": "Update Recurring Invoice", + "add_new_tax": "Add New Tax", + "no_invoices": "No Recurring Invoices yet!", + "mark_as_rejected": "Mark as rejected", + "mark_as_accepted": "Mark as accepted", + "list_of_invoices": "This section will contain the list of recurring invoices.", + "select_invoice": "Select Invoice", + "no_matching_invoices": "There are no matching recurring invoices!", + "mark_as_sent_successfully": "Recurring Invoice marked as sent successfully", + "invoice_sent_successfully": "Recurring Invoice sent successfully", + "cloned_successfully": "Recurring Invoice cloned successfully", + "clone_invoice": "Clone Recurring Invoice", + "confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice", + "item": { + "title": "Item Title", + "description": "Description", + "quantity": "Quantity", + "price": "Price", + "discount": "Discount", + "total": "Total", + "total_discount": "Total Discount", + "sub_total": "Sub Total", + "tax": "Tax", + "amount": "Amount", + "select_an_item": "Type or click to select an item", + "type_item_description": "Type Item Description (optional)" + }, + "frequency": { + "title": "Frequency", + "select_frequency": "Select Frequency", + "minute": "Minute", + "hour": "Hour", + "day_month": "Day of month", + "month": "Month", + "day_week": "Day of week" + }, + "confirm_delete": "You will not be able to recover this Invoice | You will not be able to recover these Invoices", + "created_message": "Recurring Invoice created successfully", + "updated_message": "Recurring Invoice updated successfully", + "deleted_message": "Recurring Invoice deleted successfully | Recurring Invoices deleted successfully", + "marked_as_sent_message": "Recurring Invoice marked as sent successfully", + "user_email_does_not_exist": "User email does not exist", + "something_went_wrong": "something went wrong", + "invalid_due_amount_message": "Total Recurring Invoice amount cannot be less than total paid amount for this Recurring Invoice. Please update the invoice or delete the associated payments to continue." + }, + "payments": { + "title": "Payments", + "payments_list": "Payments List", + "record_payment": "Record Payment", + "customer": "Customer", + "date": "Date", + "amount": "Amount", + "action": "Action", + "payment_number": "Payment Number", + "payment_mode": "Payment Mode", + "invoice": "Invoice", + "note": "Note", + "add_payment": "Add Payment", + "new_payment": "New Payment", + "edit_payment": "Edit Payment", + "view_payment": "View Payment", + "add_new_payment": "Add New Payment", + "send_payment_receipt": "Send Payment Receipt", + "send_payment": "Send Payment", + "save_payment": "Save Payment", + "update_payment": "Update Payment", + "payment": "Payment | Payments", + "no_payments": "No payments yet!", + "not_selected": "Not selected", + "no_invoice": "No invoice", + "no_matching_payments": "There are no matching payments!", + "list_of_payments": "This section will contain the list of payments.", + "select_payment_mode": "Select payment mode", + "confirm_mark_as_sent": "This estimate will be marked as sent", + "confirm_send_payment": "This payment will be sent via email to the customer", + "send_payment_successfully": "Payment sent successfully", + "something_went_wrong": "something went wrong", + "confirm_delete": "You will not be able to recover this Payment | You will not be able to recover these Payments", + "created_message": "Payment created successfully", + "updated_message": "Payment updated successfully", + "deleted_message": "Payment deleted successfully | Payments deleted successfully", + "invalid_amount_message": "Payment amount is invalid" + }, + "expenses": { + "title": "Expenses", + "expenses_list": "Expenses List", + "select_a_customer": "Select a customer", + "expense_title": "Title", + "customer": "Customer", + "currency": "Currency", + "contact": "Contact", + "category": "Category", + "from_date": "From Date", + "to_date": "To Date", + "expense_date": "Date", + "description": "Description", + "receipt": "Receipt", + "amount": "Amount", + "action": "Action", + "not_selected": "Not selected", + "note": "Note", + "category_id": "Category Id", + "date": "Date", + "add_expense": "Add Expense", + "add_new_expense": "Add New Expense", + "save_expense": "Save Expense", + "update_expense": "Update Expense", + "download_receipt": "Download Receipt", + "edit_expense": "Edit Expense", + "new_expense": "New Expense", + "expense": "Expense | Expenses", + "no_expenses": "No expenses yet!", + "list_of_expenses": "This section will contain the list of expenses.", + "confirm_delete": "You will not be able to recover this Expense | You will not be able to recover these Expenses", + "created_message": "Expense created successfully", + "updated_message": "Expense updated successfully", + "deleted_message": "Expense deleted successfully | Expenses deleted successfully", + "categories": { + "categories_list": "Categories List", + "title": "Title", + "name": "Name", + "description": "Description", + "amount": "Amount", + "actions": "Actions", + "add_category": "Add Category", + "new_category": "New Category", + "category": "Category | Categories", + "select_a_category": "Select a category" + } + }, + "login": { + "email": "Email", + "password": "Password", + "forgot_password": "Forgot Password?", + "or_signIn_with": "or Sign in with", + "login": "Login", + "register": "Register", + "reset_password": "Reset Password", + "password_reset_successfully": "Password Reset Successfully", + "enter_email": "Enter email", + "enter_password": "Enter Password", + "retype_password": "Retype Password" + }, + "users": { + "title": "Users", + "users_list": "Users List", + "name": "Name", + "description": "Description", + "added_on": "Added On", + "date_of_creation": "Date Of Creation", + "action": "Action", + "add_user": "Add User", + "save_user": "Save User", + "update_user": "Update User", + "user": "User | Users", + "add_new_user": "Add New User", + "new_user": "New User", + "edit_user": "Edit User", + "no_users": "No users yet!", + "list_of_users": "This section will contain the list of users.", + "email": "Email", + "phone": "Phone", + "password": "Password", + "user_attached_message": "Cannot delete an item which is already in use", + "confirm_delete": "You will not be able to recover this User | You will not be able to recover these Users", + "created_message": "User created successfully", + "updated_message": "User updated successfully", + "deleted_message": "User deleted successfully | Users deleted successfully", + "select_company_role": "Select Role for {company}", + "companies": "Companies" + }, + "reports": { + "title": "Report", + "from_date": "From Date", + "to_date": "To Date", + "status": "Status", + "paid": "Paid", + "unpaid": "Unpaid", + "download_pdf": "Download PDF", + "view_pdf": "View PDF", + "update_report": "Update Report", + "report": "Report | Reports", + "profit_loss": { + "profit_loss": "Profit & Loss", + "to_date": "To Date", + "from_date": "From Date", + "date_range": "Select Date Range" + }, + "sales": { + "sales": "Sales", + "date_range": "Select Date Range", + "to_date": "To Date", + "from_date": "From Date", + "report_type": "Report Type" + }, + "taxes": { + "taxes": "Taxes", + "to_date": "To Date", + "from_date": "From Date", + "date_range": "Select Date Range" + }, + "errors": { + "required": "Field is required" + }, + "invoices": { + "invoice": "Invoice", + "invoice_date": "Invoice Date", + "due_date": "Due Date", + "amount": "Amount", + "contact_name": "Contact Name", + "status": "Status" + }, + "estimates": { + "estimate": "Estimate", + "estimate_date": "Estimate Date", + "due_date": "Due Date", + "estimate_number": "Estimate Number", + "ref_number": "Ref Number", + "amount": "Amount", + "contact_name": "Contact Name", + "status": "Status" + }, + "expenses": { + "expenses": "Expenses", + "category": "Category", + "date": "Date", + "amount": "Amount", + "to_date": "To Date", + "from_date": "From Date", + "date_range": "Select Date Range" + } + }, + "settings": { + "menu_title": { + "account_settings": "Account Settings", + "company_information": "Company Information", + "customization": "Customization", + "preferences": "Preferences", + "notifications": "Notifications", + "tax_types": "Tax Types", + "expense_category": "Expense Categories", + "update_app": "Update App", + "backup": "Backup", + "file_disk": "File Disk", + "custom_fields": "Custom Fields", + "payment_modes": "Payment Modes", + "notes": "Notes", + "exchange_rate": "Exchange Rate" + }, + "title": "Settings", + "setting": "Settings | Settings", + "general": "General", + "language": "Language", + "primary_currency": "Primary Currency", + "timezone": "Time Zone", + "date_format": "Date Format", + "currencies": { + "title": "Currencies", + "currency": "Currency | Currencies", + "currencies_list": "Currencies List", + "select_currency": "Select Currency", + "name": "Name", + "code": "Code", + "symbol": "Symbol", + "precision": "Precision", + "thousand_separator": "Thousand Separator", + "decimal_separator": "Decimal Separator", + "position": "Position", + "position_of_symbol": "Position Of Symbol", + "right": "Right", + "left": "Left", + "action": "Action", + "add_currency": "Add Currency" + }, + "mail": { + "host": "Mail Host", + "port": "Mail Port", + "driver": "Mail Driver", + "secret": "Secret", + "mailgun_secret": "Mailgun Secret", + "mailgun_domain": "Domain", + "mailgun_endpoint": "Mailgun Endpoint", + "ses_secret": "SES Secret", + "ses_key": "SES Key", + "password": "Mail Password", + "username": "Mail Username", + "mail_config": "Mail Configuration", + "from_name": "From Mail Name", + "from_mail": "From Mail Address", + "encryption": "Mail Encryption", + "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc." + }, + "pdf": { + "title": "PDF Setting", + "footer_text": "Footer Text", + "pdf_layout": "PDF Layout" + }, + "company_info": { + "company_info": "Company info", + "company_name": "Company Name", + "company_logo": "Company Logo", + "section_description": "Information about your company that will be displayed on invoices, estimates and other documents created by Crater.", + "phone": "Phone", + "country": "Country", + "state": "State", + "city": "City", + "address": "Address", + "zip": "Zip", + "save": "Save", + "delete": "Delete", + "updated_message": "Company information updated successfully", + "delete_company": "Delete Company", + "delete_company_description": "Once you delete your company, you will lose all the data and files associated with it permanently.", + "are_you_absolutely_sure": "Are you absolutely sure?", + "delete_company_modal_desc": "This action cannot be undone. This will permanently delete {company} and all of its associated data.", + "delete_company_modal_label": "Please type {company} to confirm" + }, + "custom_fields": { + "title": "Custom Fields", + "section_description": "Customize your Invoices, Estimates & Payment Receipts with your own fields. Make sure to use the below added fields on the address formats on Customization settings page.", + "add_custom_field": "Add Custom Field", + "edit_custom_field": "Edit Custom Field", + "field_name": "Field Name", + "label": "Label", + "type": "Type", + "name": "Name", + "slug": "Slug", + "required": "Required", + "placeholder": "Placeholder", + "help_text": "Help Text", + "default_value": "Default Value", + "prefix": "Prefix", + "starting_number": "Starting Number", + "model": "Model", + "help_text_description": "Enter some text to help users understand the purpose of this custom field.", + "suffix": "Suffix", + "yes": "Yes", + "no": "No", + "order": "Order", + "custom_field_confirm_delete": "You will not be able to recover this Custom Field", + "already_in_use": "Custom Field is already in use", + "deleted_message": "Custom Field deleted successfully", + "options": "options", + "add_option": "Add Options", + "add_another_option": "Add another option", + "sort_in_alphabetical_order": "Sort in Alphabetical Order", + "add_options_in_bulk": "Add options in bulk", + "use_predefined_options": "Use Predefined Options", + "select_custom_date": "Select Custom Date", + "select_relative_date": "Select Relative Date", + "ticked_by_default": "Ticked by default", + "updated_message": "Custom Field updated successfully", + "added_message": "Custom Field added successfully", + "press_enter_to_add": "Press enter to add new option", + "model_in_use": "Cannot update model for fields which are already in use.", + "type_in_use": "Cannot update type for fields which are already in use." + }, + "customization": { + "customization": "customization", + "updated_message": "Company information updated successfully", + "save": "Save", + "insert_fields": "Insert Fields", + "learn_custom_format": "Learn how to use custom format", + "add_new_component": "Add New Component", + "component": "Component", + "Parameter": "Parameter", + "series": "Series", + "series_description": "To set a static prefix/postfix like 'INV' across your company. It supports character length of up to 4 chars.", + "series_param_label": "Series Value", + "delimiter": "Delimiter", + "delimiter_description": "Single character for specifying the boundary between 2 separate components. By default its set to -", + "delimiter_param_label": "Delimiter Value", + "date_format": "Date Format", + "date_format_description": "A local date and time field which accepts a format parameter. The default format: 'Y' renders the current year.", + "date_format_param_label": "Format", + "sequence": "Sequence", + "sequence_description": "Consecutive sequence of numbers across your company. You can specify the length on the given paramter.", + "sequence_param_label": "Sequence Length", + "customer_series": "Customer Series", + "customer_series_description": "To set a different prefix/postfix for each customer.", + "customer_sequence": "Customer Sequence", + "customer_sequence_description": "Consecutive sequence of numbers for each of your customer.", + "customer_sequence_param_label": "Sequence Length", + "random_sequence": "Random Sequence", + "random_sequence_description": "Random alphanumeric string. You can specify the length on the given paramter.", + "random_sequence_param_label": "Sequence Length", + "invoices": { + "title": "Invoices", + "invoice_number_format": "Invoice Number Format", + "invoice_number_format_description": "Customize how your invoice number gets generated automatically when you create a new invoice.", + "preview_invoice_number": "Preview Invoice Number", + "due_date": "Due Date", + "due_date_description": "Specify how due date is automatically set when you create an invoice.", + "due_date_days": "Invoice Due after days", + "set_due_date_automatically": "Set Due Date Automatically", + "set_due_date_automatically_description": "Enable this if you wish to set due date automatically when you create a new invoice.", + "default_formats": "Default Formats", + "default_formats_description": "Below given formats are used to fill up the fields automatically on invoice creation.", + "default_invoice_email_body": "Default Invoice Email Body", + "company_address_format": "Company Address Format", + "shipping_address_format": "Shipping Address Format", + "billing_address_format": "Billing Address Format", + "invoice_email_attachment": "Send invoices as attachments", + "invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.", + "invoice_settings_updated": "Invoice Settings updated successfully", + "retrospective_edits": "Retrospective Edits", + "allow": "Allow", + "disable_on_invoice_partial_paid": "Disable after partial payment is recorded", + "disable_on_invoice_paid": "Disable after full payment is recorded", + "disable_on_invoice_sent": "Disable after invoice is sent", + "retrospective_edits_description": " Based on your country's laws or your preference, you can restrict users from editing finalised invoices." + }, + "estimates": { + "title": "Estimates", + "estimate_number_format": "Estimate Number Format", + "estimate_number_format_description": "Customize how your estimate number gets generated automatically when you create a new estimate.", + "preview_estimate_number": "Preview Estimate Number", + "expiry_date": "Expiry Date", + "expiry_date_description": "Specify how expiry date is automatically set when you create an estimate.", + "expiry_date_days": "Estimate Expires after days", + "set_expiry_date_automatically": "Set Expiry Date Automatically", + "set_expiry_date_automatically_description": "Enable this if you wish to set expiry date automatically when you create a new estimate.", + "default_formats": "Default Formats", + "default_formats_description": "Below given formats are used to fill up the fields automatically on estimate creation.", + "default_estimate_email_body": "Default Estimate Email Body", + "company_address_format": "Company Address Format", + "shipping_address_format": "Shipping Address Format", + "billing_address_format": "Billing Address Format", + "estimate_email_attachment": "Send estimates as attachments", + "estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.", + "estimate_settings_updated": "Estimate Settings updated successfully", + "convert_estimate_options": "Estimate Convert Action", + "convert_estimate_description": "Specify what happens to the estimate after it gets converted to an invoice.", + "no_action": "No action", + "delete_estimate": "Delete estimate", + "mark_estimate_as_accepted": "Mark estimate as accepted" + }, + "payments": { + "title": "Payments", + "payment_number_format": "Payment Number Format", + "payment_number_format_description": "Customize how your payment number gets generated automatically when you create a new payment.", + "preview_payment_number": "Preview Payment Number", + "default_formats": "Default Formats", + "default_formats_description": "Below given formats are used to fill up the fields automatically on payment creation.", + "default_payment_email_body": "Default Payment Email Body", + "company_address_format": "Company Address Format", + "from_customer_address_format": "From Customer Address Format", + "payment_email_attachment": "Send payments as attachments", + "payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.", + "payment_settings_updated": "Payment Settings updated successfully" + }, + "items": { + "title": "Items", + "units": "Units", + "add_item_unit": "Add Item Unit", + "edit_item_unit": "Edit Item Unit", + "unit_name": "Unit Name", + "item_unit_added": "Item Unit Added", + "item_unit_updated": "Item Unit Updated", + "item_unit_confirm_delete": "You will not be able to recover this Item unit", + "already_in_use": "Item Unit is already in use", + "deleted_message": "Item Unit deleted successfully" + }, + "notes": { + "title": "Notes", + "description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", + "notes": "Notes", + "type": "Type", + "add_note": "Add Note", + "add_new_note": "Add New Note", + "name": "Name", + "edit_note": "Edit Note", + "note_added": "Note added successfully", + "note_updated": "Note Updated successfully", + "note_confirm_delete": "You will not be able to recover this Note", + "already_in_use": "Note is already in use", + "deleted_message": "Note deleted successfully" + } + }, + "account_settings": { + "profile_picture": "Profile Picture", + "name": "Name", + "email": "Email", + "password": "Password", + "confirm_password": "Confirm Password", + "account_settings": "Account Settings", + "save": "Save", + "section_description": "You can update your name, email & password using the form below.", + "updated_message": "Account Settings updated successfully" + }, + "user_profile": { + "name": "Name", + "email": "Email", + "password": "Password", + "confirm_password": "Confirm Password" + }, + "notification": { + "title": "Notifications", + "email": "Send Notifications to", + "description": "Which email notifications would you like to receive when something changes?", + "invoice_viewed": "Invoice viewed", + "invoice_viewed_desc": "When your customer views the invoice sent via crater dashboard.", + "estimate_viewed": "Estimate viewed", + "estimate_viewed_desc": "When your customer views the estimate sent via crater dashboard.", + "save": "Save", + "email_save_message": "Email saved successfully", + "please_enter_email": "Please Enter Email" + }, + "roles": { + "title": "Roles", + "description": "Manage the roles & permissions of this company", + "save": "Save", + "add_new_role": "Add New Role", + "role_name": "Role Name", + "added_on": "Added on", + "add_role": "Add Role", + "edit_role": "Edit Role", + "name": "Name", + "permission": "Permission | Permissions", + "select_all": "Select All", + "none": "None", + "confirm_delete": "You will not be able to recover this Role", + "created_message": "Role created successfully", + "updated_message": "Role updated successfully", + "deleted_message": "Role deleted successfully", + "already_in_use": "Role is already in use" + }, + "exchange_rate": { + "exchange_rate": "Exchange Rate", + "title": "Fix Currency Exchange issues", + "description": "Please enter exchange rate of all the currencies mentioned below to help Crater properly calculate the amounts in {currency}.", + "drivers": "Drivers", + "new_driver": "Add New Provider", + "edit_driver": "Edit Provider", + "select_driver": "Select Driver", + "update": "select exchange rate ", + "providers_description": "Configure your exchange rate providers here to automatically fetch the latest exchange rate on transactions.", + "key": "API Key", + "name": "Name", + "driver": "Driver", + "is_default": "IS DEFAULT", + "currency": "Currencies", + "exchange_rate_confirm_delete": "You will not be able to recover this driver", + "created_message": "Provider Created successfully", + "updated_message": "Provider Updated Successfully", + "deleted_message": "Provider Deleted Successfully", + "error": " You cannot Delete Active Driver", + "default_currency_error": "This currency is already used in one of the Active Provider", + "exchange_help_text": "Enter exchange rate to convert from {currency} to {baseCurrency}", + "currency_freak": "Currency Freak", + "currency_layer": "Currency Layer", + "open_exchange_rate": "Open Exchange Rate", + "currency_converter": "Currency Converter", + "server": "Server", + "url": "URL", + "active": "Active", + "currency_help_text": "This provider will only be used on above selected currencies", + "currency_in_used": "The following currencies are already active on another provider. Please remove these currencies from selection to activate this provider again." + }, + "tax_types": { + "title": "Tax Types", + "add_tax": "Add Tax", + "edit_tax": "Edit Tax", + "description": "You can add or Remove Taxes as you please. Crater supports Taxes on Individual Items as well as on the invoice.", + "add_new_tax": "Add New Tax", + "tax_settings": "Tax Settings", + "tax_per_item": "Tax Per Item", + "tax_name": "Tax Name", + "compound_tax": "Compound Tax", + "percent": "Percent", + "action": "Action", + "tax_setting_description": "Enable this if you want to add taxes to individual invoice items. By default, taxes are added directly to the invoice.", + "created_message": "Tax type created successfully", + "updated_message": "Tax type updated successfully", + "deleted_message": "Tax type deleted successfully", + "confirm_delete": "You will not be able to recover this Tax Type", + "already_in_use": "Tax is already in use" + }, + "payment_modes": { + "title": "Payment Modes", + "description": "Modes of transaction for payments", + "add_payment_mode": "Add Payment Mode", + "edit_payment_mode": "Edit Payment Mode", + "mode_name": "Mode Name", + "payment_mode_added": "Payment Mode Added", + "payment_mode_updated": "Payment Mode Updated", + "payment_mode_confirm_delete": "You will not be able to recover this Payment Mode", + "already_in_use": "Payment Mode is already in use", + "deleted_message": "Payment Mode deleted successfully" + }, + "expense_category": { + "title": "Expense Categories", + "action": "Action", + "description": "Categories are required for adding expense entries. You can Add or Remove these categories according to your preference.", + "add_new_category": "Add New Category", + "add_category": "Add Category", + "edit_category": "Edit Category", + "category_name": "Category Name", + "category_description": "Description", + "created_message": "Expense Category created successfully", + "deleted_message": "Expense category deleted successfully", + "updated_message": "Expense category updated successfully", + "confirm_delete": "You will not be able to recover this Expense Category", + "already_in_use": "Category is already in use" + }, + "preferences": { + "currency": "Currency", + "default_language": "Default Language", + "time_zone": "Time Zone", + "fiscal_year": "Financial Year", + "date_format": "Date Format", + "discount_setting": "Discount Setting", + "discount_per_item": "Discount Per Item ", + "discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.", + "save": "Save", + "preference": "Preference | Preferences", + "general_settings": "Default preferences for the system.", + "updated_message": "Preferences updated successfully", + "select_language": "Select Language", + "select_time_zone": "Select Time Zone", + "select_date_format": "Select Date Format", + "select_financial_year": "Select Financial Year", + "recurring_invoice_status": "Recurring Invoice Status", + "create_status": "Create Status", + "active": "Active", + "on_hold": "On Hold", + "update_status": "Update Status", + "completed": "Completed", + "company_currency_unchangeable": "Company currency cannot be changed" + }, + "update_app": { + "title": "Update App", + "description": "You can easily update Crater by checking for a new update by clicking the button below", + "check_update": "Check for updates", + "avail_update": "New Update available", + "next_version": "Next version", + "requirements": "Requirements", + "update": "Update Now", + "update_progress": "Update in progress...", + "progress_text": "It will just take a few minutes. Please do not refresh the screen or close the window before the update finishes", + "update_success": "App has been updated! Please wait while your browser window gets reloaded automatically.", + "latest_message": "No update available! You are on the latest version.", + "current_version": "Current Version", + "download_zip_file": "Download ZIP file", + "unzipping_package": "Unzipping Package", + "copying_files": "Copying Files", + "deleting_files": "Deleting Unused files", + "running_migrations": "Running Migrations", + "finishing_update": "Finishing Update", + "update_failed": "Update Failed", + "update_failed_text": "Sorry! Your update failed on : {step} step", + "update_warning": "All of the application files and default template files will be overwritten when you update the application using this utility. Please take a backup of your templates & database before updating." + }, + "backup": { + "title": "Backup | Backups", + "description": "The backup is a zipfile that contains all files in the directories you specify along with a dump of your database", + "new_backup": "Add New Backup", + "create_backup": "Create Backup", + "select_backup_type": "Select Backup Type", + "backup_confirm_delete": "You will not be able to recover this Backup", + "path": "path", + "new_disk": "New Disk", + "created_at": "created at", + "size": "size", + "dropbox": "dropbox", + "local": "local", + "healthy": "healthy", + "amount_of_backups": "amount of backups", + "newest_backups": "newest backups", + "used_storage": "used storage", + "select_disk": "Select Disk", + "action": "Action", + "deleted_message": "Backup deleted successfully", + "created_message": "Backup created successfully", + "invalid_disk_credentials": "Invalid credential of selected disk" + }, + "disk": { + "title": "File Disk | File Disks", + "description": "By default, Crater will use your local disk for saving backups, avatar and other image files. You can configure more than one disk drivers like DigitalOcean, S3 and Dropbox according to your preference.", + "created_at": "created at", + "dropbox": "dropbox", + "name": "Name", + "driver": "Driver", + "disk_type": "Type", + "disk_name": "Disk Name", + "new_disk": "Add New Disk", + "filesystem_driver": "Filesystem Driver", + "local_driver": "local Driver", + "local_root": "local Root", + "public_driver": "Public Driver", + "public_root": "Public Root", + "public_url": "Public URL", + "public_visibility": "Public Visibility", + "media_driver": "Media Driver", + "media_root": "Media Root", + "aws_driver": "AWS Driver", + "aws_key": "AWS Key", + "aws_secret": "AWS Secret", + "aws_region": "AWS Region", + "aws_bucket": "AWS Bucket", + "aws_root": "AWS Root", + "do_spaces_type": "Do Spaces type", + "do_spaces_key": "Do Spaces key", + "do_spaces_secret": "Do Spaces Secret", + "do_spaces_region": "Do Spaces Region", + "do_spaces_bucket": "Do Spaces Bucket", + "do_spaces_endpoint": "Do Spaces Endpoint", + "do_spaces_root": "Do Spaces Root", + "dropbox_type": "Dropbox Type", + "dropbox_token": "Dropbox Token", + "dropbox_key": "Dropbox Key", + "dropbox_secret": "Dropbox Secret", + "dropbox_app": "Dropbox App", + "dropbox_root": "Dropbox Root", + "default_driver": "Default Driver", + "is_default": "IS DEFAULT", + "set_default_disk": "Set Default Disk", + "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk", + "success_set_default_disk": "Disk set as default successfully", + "save_pdf_to_disk": "Save PDFs to Disk", + "disk_setting_description": " Enable this, if you wish to save a copy of each Invoice, Estimate & Payment Receipt PDF on your default disk automatically. Turning this option will decrease the load-time when viewing the PDFs.", + "select_disk": "Select Disk", + "disk_settings": "Disk Settings", + "confirm_delete": "Your existing files & folders in the specified disk will not be affected but your disk configuration will be deleted from Crater", + "action": "Action", + "edit_file_disk": "Edit File Disk", + "success_create": "Disk added successfully", + "success_update": "Disk updated successfully", + "error": "Disk addition failed", + "deleted_message": "File Disk deleted successfully", + "disk_variables_save_successfully": "Disk Configured Successfully", + "disk_variables_save_error": "Disk configuration failed.", + "invalid_disk_credentials": "Invalid credential of selected disk" + } + }, + "wizard": { + "account_info": "Account Information", + "account_info_desc": "Below details will be used to create the main Administrator account. Also you can change the details anytime after logging in.", + "name": "Name", + "email": "Email", + "password": "Password", + "confirm_password": "Confirm Password", + "save_cont": "Save & Continue", + "company_info": "Company Information", + "company_info_desc": "This information will be displayed on invoices. Note that you can edit this later on settings page.", + "company_name": "Company Name", + "company_logo": "Company Logo", + "logo_preview": "Logo Preview", + "preferences": "Company Preferences", + "preferences_desc": "Specify the default preferences for this company.", + "currency_set_alert": "The company's currency cannot be changed later.", + "country": "Country", + "state": "State", + "city": "City", + "address": "Address", + "street": "Street1 | Street2", + "phone": "Phone", + "zip_code": "Zip Code", + "go_back": "Go Back", + "currency": "Currency", + "language": "Language", + "time_zone": "Time Zone", + "fiscal_year": "Financial Year", + "date_format": "Date Format", + "from_address": "From Address", + "username": "Username", + "next": "Next", + "continue": "Continue", + "skip": "Skip", + "database": { + "database": "Site URL & Database", + "connection": "Database Connection", + "host": "Database Host", + "port": "Database Port", + "password": "Database Password", + "app_url": "App URL", + "app_domain": "App Domain", + "username": "Database Username", + "db_name": "Database Name", + "db_path": "Database Path", + "desc": "Create a database on your server and set the credentials using the form below." + }, + "permissions": { + "permissions": "Permissions", + "permission_confirm_title": "Are you sure you want to continue?", + "permission_confirm_desc": "Folder permission check failed", + "permission_desc": "Below is the list of folder permissions which are required in order for the app to work. If the permission check fails, make sure to update your folder permissions." + }, + "verify_domain": { + "title": "Domain Verification", + "desc": "Crater uses Session based authentication which requires domain verification for security purposes. Please enter the domain on which you will be accessing your web application.", + "app_domain": "App Domain", + "verify_now": "Verify Now", + "success": "Domain Verify Successfully.", + "failed": "Domain verification failed. Please enter valid domain name.", + "verify_and_continue": "Verify And Continue" + }, + "mail": { + "host": "Mail Host", + "port": "Mail Port", + "driver": "Mail Driver", + "secret": "Secret", + "mailgun_secret": "Mailgun Secret", + "mailgun_domain": "Domain", + "mailgun_endpoint": "Mailgun Endpoint", + "ses_secret": "SES Secret", + "ses_key": "SES Key", + "password": "Mail Password", + "username": "Mail Username", + "mail_config": "Mail Configuration", + "from_name": "From Mail Name", + "from_mail": "From Mail Address", + "encryption": "Mail Encryption", + "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc." + }, + "req": { + "system_req": "System Requirements", + "php_req_version": "Php (version {version} required)", + "check_req": "Check Requirements", + "system_req_desc": "Crater has a few server requirements. Make sure that your server has the required php version and all the extensions mentioned below." + }, + "errors": { + "migrate_failed": "Migrate Failed", + "database_variables_save_error": "Cannot write configuration to .env file. Please check its file permissions", + "mail_variables_save_error": "Email configuration failed.", + "connection_failed": "Database connection failed", + "database_should_be_empty": "Database should be empty" + }, + "success": { + "mail_variables_save_successfully": "Email configured successfully", + "database_variables_save_successfully": "Database configured successfully." + } + }, + "validation": { + "invalid_phone": "Invalid Phone Number", + "invalid_url": "Invalid url (ex: http://www.craterapp.com)", + "invalid_domain_url": "Invalid url (ex: craterapp.com)", + "required": "Field is required", + "email_incorrect": "Incorrect Email.", + "email_already_taken": "The email has already been taken.", + "email_does_not_exist": "User with given email doesn't exist", + "item_unit_already_taken": "This item unit name has already been taken", + "payment_mode_already_taken": "This payment mode name has already been taken", + "send_reset_link": "Send Reset Link", + "not_yet": "Not yet? Send it again", + "password_min_length": "Password must contain {count} characters", + "name_min_length": "Name must have at least {count} letters.", + "prefix_min_length": "Prefix must have at least {count} letters.", + "enter_valid_tax_rate": "Enter valid tax rate", + "numbers_only": "Numbers Only.", + "characters_only": "Characters Only.", + "password_incorrect": "Passwords must be identical", + "password_length": "Password must be {count} character long.", + "qty_must_greater_than_zero": "Quantity must be greater than zero.", + "price_greater_than_zero": "Price must be greater than zero.", + "payment_greater_than_zero": "Payment must be greater than zero.", + "payment_greater_than_due_amount": "Entered Payment is more than due amount of this invoice.", + "quantity_maxlength": "Quantity should not be greater than 20 digits.", + "price_maxlength": "Price should not be greater than 20 digits.", + "price_minvalue": "Price should be greater than 0.", + "amount_maxlength": "Amount should not be greater than 20 digits.", + "amount_minvalue": "Amount should be greater than 0.", + "discount_maxlength": "Discount should not be greater than max discount", + "description_maxlength": "Description should not be greater than 255 characters.", + "subject_maxlength": "Subject should not be greater than 100 characters.", + "message_maxlength": "Message should not be greater than 255 characters.", + "maximum_options_error": "Maximum of {max} options selected. First remove a selected option to select another.", + "notes_maxlength": "Notes should not be greater than 65,000 characters.", + "address_maxlength": "Address should not be greater than 255 characters.", + "ref_number_maxlength": "Ref Number should not be greater than 255 characters.", + "prefix_maxlength": "Prefix should not be greater than 5 characters.", + "something_went_wrong": "something went wrong", + "number_length_minvalue": "Number length should be greater than 0", + "at_least_one_ability": "Please select atleast one Permission.", + "valid_driver_key": "Please enter a valid {driver} key.", + "valid_exchange_rate": "Please enter a valid exchange rate.", + "company_name_not_same": "Company name must match with given name." + }, + "errors": { + "starter_plan": "This feature is available on Starter plan and onwards!", + "invalid_provider_key": "Please Enter Valid Provider API Key.", + "estimate_number_used": "The estimate number has already been taken.", + "invoice_number_used": "The invoice number has already been taken.", + "payment_attached": "This invoice already has a payment attached to it. Make sure to delete the attached payments first in order to go ahead with the removal.", + "payment_number_used": "The payment number has already been taken.", + "name_already_taken": "The name has already been taken.", + "receipt_does_not_exist": "Receipt does not exist.", + "customer_cannot_be_changed_after_payment_is_added": "Customer cannot be change after payment is added", + "invalid_credentials": "Invalid Credentials.", + "not_allowed": "Not Allowed", + "login_invalid_credentials": "These credentials do not match our records.", + "enter_valid_cron_format": "Please enter a valid cron format" + }, + "pdf_estimate_label": "Estimate", + "pdf_estimate_number": "Estimate Number", + "pdf_estimate_date": "Estimate Date", + "pdf_estimate_expire_date": "Expiry date", + "pdf_invoice_label": "Invoice", + "pdf_invoice_number": "Invoice Number", + "pdf_invoice_date": "Invoice Date", + "pdf_invoice_due_date": "Due date", + "pdf_notes": "Notes", + "pdf_items_label": "Items", + "pdf_quantity_label": "Quantity", + "pdf_price_label": "Price", + "pdf_discount_label": "Discount", + "pdf_amount_label": "Amount", + "pdf_subtotal": "Subtotal", + "pdf_total": "Total", + "pdf_payment_label": "Payment", + "pdf_payment_receipt_label": "PAYMENT RECEIPT", + "pdf_payment_date": "Payment Date", + "pdf_payment_number": "Payment Number", + "pdf_payment_mode": "Payment Mode", + "pdf_payment_amount_received_label": "Amount Received", + "pdf_expense_report_label": "EXPENSES REPORT", + "pdf_total_expenses_label": "TOTAL EXPENSE", + "pdf_profit_loss_label": "PROFIT & LOSS REPORT", + "pdf_sales_customers_label": "Sales Customer Report", + "pdf_sales_items_label": "Sales Item Report", + "pdf_tax_summery_label": "Tax Summary Report", + "pdf_income_label": "INCOME", + "pdf_net_profit_label": "NET PROFIT", + "pdf_customer_sales_report": "Sales Report: By Customer", + "pdf_total_sales_label": "TOTAL SALES", + "pdf_item_sales_label": "Sales Report: By Item", + "pdf_tax_report_label": "TAX REPORT", + "pdf_total_tax_label": "TOTAL TAX", + "pdf_tax_types_label": "Tax Types", + "pdf_expenses_label": "Expenses", + "pdf_bill_to": "Bill to,", + "pdf_ship_to": "Ship to,", + "pdf_received_from": "Received from:", + "pdf_tax_label": "Tax" +} diff --git a/resources/assets/js/plugins/es.json b/resources/scripts/locales/es.json similarity index 93% rename from resources/assets/js/plugins/es.json rename to resources/scripts/locales/es.json index 8ea6fb1a5..61ffe4f23 100644 --- a/resources/assets/js/plugins/es.json +++ b/resources/scripts/locales/es.json @@ -5,7 +5,7 @@ "items": "Artículos", "invoices": "Facturas", "expenses": "Gastos", - "estimates": "Presupuesto", + "estimates": "Presupuestos", "payments": "Pagos", "reports": "Informes", "settings": "Configuraciones", @@ -30,7 +30,7 @@ "sort_by": "Ordenar por", "ascending": "Ascendente", "descending": "Descendente", - "subject": "Asunto", + "subject": "Sujeta", "body": "Cuerpo", "message": "Mensaje", "send": "Enviar", @@ -86,8 +86,7 @@ "retry": "Procesar de nuevo", "choose_note": "Elegir nota", "no_note_found": "No se encontró ninguna nota", - "insert_note": "Insertar una nota", - "copied_pdf_url_clipboard": "Copiar Url al portapapeles" + "insert_note": "Insertar una nota" }, "dashboard": { "select_year": "Seleccionar año", @@ -104,9 +103,6 @@ "net_income": "Ingresos netos", "year": "Seleccione año" }, - "weekly_invoices": { - "title": "Facturas semanales" - }, "monthly_chart": { "title": "Gastos de venta" }, @@ -226,9 +222,9 @@ "title": "Presupuestos", "estimate": "Presupuesto | Presupuestos", "estimates_list": "Lista de presupuestos", - "days": "{días} Días", - "months": "{meses} Mes", - "years": "{años} Año", + "days": "días Días", + "months": "meses Mes", + "years": "años Año", "all": "Todas", "paid": "Pagada", "unpaid": "No pagado", @@ -295,7 +291,6 @@ "created_message": "Presupuesto creada con éxito", "updated_message": "Presupuesto actualizada con éxito", "deleted_message": "Presupuesto eliminada con éxito | Presupuestos eliminadas exitosamente", - "user_email_does_not_exist": "El email del usuario no existe", "something_went_wrong": "Algo fue mal", "item": { "title": "Título del artículo", @@ -315,9 +310,9 @@ "invoices": { "title": "Facturas", "invoices_list": "Lista de facturas", - "days": "{días} Días", - "months": "{meses} Mes", - "years": "{años} Año", + "days": "días Días", + "months": "meses Mes", + "years": "años Año", "all": "Todas", "paid": "Pagada", "unpaid": "No pagado", @@ -368,7 +363,7 @@ "select_invoice": "Seleccionar factura", "no_matching_invoices": "¡No hay facturas coincidentes con la selección!", "mark_as_sent_successfully": "Factura marcada como enviada con éxito", - "send_invoice_successfully": "Factura enviada exitosamente", + "invoice_sent_successfully": "Factura enviada exitosamente", "cloned_successfully": "Factura clonada exitosamente", "clone_invoice": "Factura de clonación", "confirm_clone": "Esta factura se clonará en una nueva factura.", @@ -386,39 +381,14 @@ "select_an_item": "Escriba o haga clic para seleccionar un elemento", "type_item_description": "Descripción del tipo de elemento (opcional)" }, - "payment_attached_message": "Una de las facturas seleccionadas ya tiene un pago adjunto. Asegúrese de eliminar primero los pagos adjuntos para continuar con la eliminación", "confirm_delete": "No podrá recuperar esta factura | No podrá recuperar estas facturas", "created_message": "Factura creada exitosamente", "updated_message": "Factura actualizada exitosamente", "deleted_message": "Factura eliminada con éxito | Facturas borradas exitosamente", "marked_as_sent_message": "Factura marcada como enviada con éxito", - "user_email_does_not_exist": "El email del usuario no existe", "something_went_wrong": "Algo fue mal", "invalid_due_amount_message": "El pago ingresado es mayor que la cantidad total debida por esta factura. Por favor verificalo y vuelve a intentarlo" }, - "credit_notes": { - "title": "Notas de credito", - "credit_notes_list": "Lista de notas de crédito", - "credit_notes": "Notas de credito", - "contact": "Contacto", - "date": "Fecha", - "amount": "Cantidad", - "action": "Acción", - "credit_number": "Número de crédito", - "notes": "Notas", - "confirm_delete": "¿Desea eliminar esta nota de crédito?", - "item": { - "title": "Título del artículo", - "description": "Descripción", - "quantity": "Cantidad", - "price": "Precio", - "discount": "Descuento", - "total": "Total", - "total_discount": "Descuento total", - "sub_total": "Subtotal", - "tax": "Impuesto" - } - }, "payments": { "title": "Pagos", "payments_list": "Lista de pagos", @@ -450,7 +420,6 @@ "confirm_mark_as_sent": "Este presupuesto se marcará como enviado", "confirm_send_payment": "Este pago se enviará por correo electrónico al cliente", "send_payment_successfully": "Pago enviado correctamente", - "user_email_does_not_exist": "El email del usuario no existe", "something_went_wrong": "Algo fue mal", "confirm_delete": "No podrá recuperar este pago | No podrá recuperar estos pagos", "created_message": "Pago creado con éxito", @@ -515,8 +484,7 @@ "password_reset_successfully": "Contraseña reestablecida con éxito", "enter_email": "Escriba el correo electrónico", "enter_password": "Escriba la contraseña", - "retype_password": "Reescriba la contraseña", - "login_placeholder": "correo@ejemplo.com" + "retype_password": "Reescriba la contraseña" }, "users": { "title": "Usuarios", @@ -751,30 +719,24 @@ "title": "Facturas", "notes": "Notas", "invoice_prefix": "Prefijo de las facturas", - "invoice_number_length": "Invoice number length", "default_invoice_email_body": "Cuerpo predeterminado del correo electrónico de la factura", "invoice_settings": "Ajustes de facturas", "autogenerate_invoice_number": "Autogenerar número de factura", - "invoice_setting_description": "Desactive esto, si no desea generar automáticamente números de factura cada vez que cree una nueva factura.", - "invoice_email_attachment": "Send invoices as attachments", - "invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.", + "autogenerate_invoice_number_desc": "Desactive esto, si no desea generar automáticamente números de factura cada vez que cree una nueva factura.", "enter_invoice_prefix": "Introduzca el prefijo de factura", "terms_and_conditions": "Términos y Condiciones", "company_address_format": "Formato de dirección de la empresa", "shipping_address_format": "Formato de la dirección de envío", "billing_address_format": "Formato de dirección de facturación", - "invoice_setting_updated": "Configuración de factura actualizada correctamente" + "invoice_settings_updated": "Configuración de factura actualizada correctamente" }, "estimates": { "title": "Estimaciones", "estimate_prefix": "Prefijo de los presupuestos", - "estimate_number_length": "Estimate number length", "default_estimate_email_body": "Cuerpo predeterminado estimado del correo electrónico", "estimate_settings": "Ajustes de presupuestos", "autogenerate_estimate_number": "Autogenerar número de presupuesto", "estimate_setting_description": "Desactive esto, si no desea generar automáticamente números de presupuesto cada vez que cree un nuevo presupuesto.", - "estimate_email_attachment": "Send estimates as attachments", - "estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.", "enter_estimate_prefix": "Introduzca el prefijo de presupuesto", "estimate_setting_updated": "Configuración de presupuestos actualizada correctamente", "company_address_format": "Formato de dirección de la empresa", @@ -785,13 +747,10 @@ "title": "Pagos", "description": "Modos de transacción de pagos", "payment_prefix": "Prefijo de los pagos", - "payment_number_length": "Payment number lenght", "default_payment_email_body": "Cuerpo predeterminado del correo electrónico del pago", "payment_settings": "Ajustes de pagos", "autogenerate_payment_number": "Autogenerar número de pago", "payment_setting_description": "Desactive esto, si no desea generar automáticamente números de pago cada vez que cree un nuevo pago.", - "payment_email_attachment": "Send payments as attachments", - "payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.", "enter_payment_prefix": "Introduzca el prefijo de pago", "payment_setting_updated": "Configuración de pagos actualizada correctamente", "payment_modes": "Modos de pago", @@ -931,7 +890,6 @@ "download_zip_file": "Descargar archivo ZIP", "unzipping_package": "Descomprimir paquete", "copying_files": "Copiando documentos", - "deleting_files": "Deleting Unused files", "running_migrations": "Ejecutar migraciones", "finishing_update": "Actualización final", "update_failed": "Actualización fallida", @@ -1001,7 +959,6 @@ "default_driver": "Controlador por defecto", "is_default": "ES PREDETERMINADO", "set_default_disk": "Establecer disco predeterminado", - "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk", "success_set_default_disk": "Disco establecido correctamente como predeterminado", "save_pdf_to_disk": "Guardar PDFs a disco", "disk_setting_description": " Habilite esto, si desea guardar automáticamente una copia en formato pdf de cada factura, cálculo y recibo de pago en su disco predeterminado. Al activar esta opción, se reducirá el tiempo de carga al visualizar los archivos PDFs.", @@ -1107,14 +1064,6 @@ "database_variables_save_successfully": "Base de datos configurada con éxito." } }, - "layout_login": { - "copyright_crater": "Copyright @ Crater - 2020", - "super_simple_invoicing": "Facturación super simple", - "for_freelancer": "para autónomos y", - "small_businesses": "pequeñas empresas", - "crater_help": "Crater te ayuda a rastrear gastos, registrar pagos y generar hermosas", - "invoices_and_estimates": "facturas y presupuestos con capacidad para elegir múltiples plantillas." - }, "validation": { "invalid_phone": "Numero de telefono invalido", "invalid_url": "URL no válida (por ejemplo, http://www.crater.com)", @@ -1151,8 +1100,7 @@ "address_maxlength": "La dirección no debe tener más de 255 caracteres.", "ref_number_maxlength": "El número de referencia no debe tener más de 255 caracteres.", "prefix_maxlength": "El prefijo no debe tener más de 5 caracteres.", - "something_went_wrong": "Algo fue mal", - "number_length_minvalue": "Number lenght should be greater than 0" + "something_went_wrong": "Algo fue mal" }, "pdf_estimate_label": "Presupuestar", "pdf_estimate_number": "Número de Presupuesto", @@ -1167,7 +1115,6 @@ "pdf_quantity_label": "Cantidad", "pdf_price_label": "Precio", "pdf_discount_label": "Descuento", - "pdf_tax_label": "Impuesto", "pdf_amount_label": "Cantidad", "pdf_subtotal": "Subtotal", "pdf_total": "Total", @@ -1194,5 +1141,6 @@ "pdf_expenses_label": "Gastos", "pdf_bill_to": "Cobrar a,", "pdf_ship_to": "Enviar a,", - "pdf_received_from": "Recibido desde:" + "pdf_received_from": "Recibido desde:", + "pdf_tax_label": "Imposto" } diff --git a/resources/scripts/locales/fr.json b/resources/scripts/locales/fr.json new file mode 100644 index 000000000..4d8f96213 --- /dev/null +++ b/resources/scripts/locales/fr.json @@ -0,0 +1,1146 @@ +{ + "navigation": { + "dashboard": "Tableau de bord", + "customers": "Clients", + "items": "Articles", + "invoices": "Factures", + "expenses": "Dépenses", + "estimates": "Devis", + "payments": "Paiements", + "reports": "Rapports", + "settings": "Paramètres", + "logout": "Se déconnecter", + "users": "Utilisateurs" + }, + "general": { + "add_company": "Ajouter une entreprise", + "view_pdf": "Voir PDF", + "copy_pdf_url": "Copier l'URL du PDF", + "download_pdf": "Télécharger le PDF", + "save": "Sauvegarder", + "create": "Créer", + "cancel": "Annuler", + "update": "Mise à jour", + "deselect": "Retirer", + "download": "Télécharger", + "from_date": "A partir de la date", + "to_date": "À ce jour", + "from": "De", + "to": "À", + "sort_by": "Trier par", + "ascending": "Ascendant", + "descending": "Descendant", + "subject": "matière", + "body": "Corps du message", + "message": "Message", + "send": "Envoyer", + "go_back": "Retourner", + "back_to_login": "Retour à l'écran de connexion ?", + "home": "Accueil", + "filter": "Filtre", + "delete": "Effacer", + "edit": "Modifier", + "view": "Voir", + "add_new_item": "Ajoute un nouvel objet", + "clear_all": "Tout effacer", + "showing": "Montant", + "of": "de", + "actions": "Actions", + "subtotal": "SOUS-TOTAL", + "discount": "REMISE", + "fixed": "Fixée", + "percentage": "Pourcentage", + "tax": "IMPÔT", + "total_amount": "MONTANT TOTAL", + "bill_to": "facturer", + "ship_to": "Envoyez à", + "due": "Dû", + "draft": "Brouillon", + "sent": "Envoyée", + "all": "Tout", + "select_all": "Tout sélectionner", + "choose_file": "Cliquez ici pour choisir un fichier", + "choose_template": "Choisissez un modèle", + "choose": "Choisir", + "remove": "Retirer", + "powered_by": "Propulsé par", + "bytefury": "Bytefury", + "select_a_status": "Sélectionnez un statut", + "select_a_tax": "Sélectionnez une taxe", + "search": "Rechercher", + "are_you_sure": "Êtes-vous sûr ?", + "list_is_empty": "La liste est vide.", + "no_tax_found": "Aucune taxe trouvée !", + "four_zero_four": "404", + "you_got_lost": "Oups! Vous vous êtes perdus!", + "go_home": "Retour à l'accueil", + "test_mail_conf": "Tester la configuration", + "send_mail_successfully": "Mail envoyé avec succès", + "setting_updated": "Paramètres mis à jour avec succès", + "select_state": "Sélectionnez l'état", + "select_country": "Choisissez le pays", + "select_city": "Sélectionnez une ville", + "street_1": "Rue 1", + "street_2": "Rue # 2", + "action_failed": "Action : échoué", + "retry": "Réessayez", + "choose_note": "Choisissez une note", + "no_note_found": "Aucune note trouvée", + "insert_note": "Insérer une note" + }, + "dashboard": { + "select_year": "Sélectionnez l'année", + "cards": { + "due_amount": "Montant dû", + "customers": "Clients", + "invoices": "Factures", + "estimates": "Devis" + }, + "chart_info": { + "total_sales": "Ventes", + "total_receipts": "Reçus", + "total_expense": "Dépenses", + "net_income": "Revenu net", + "year": "Sélectionnez l'année" + }, + "monthly_chart": { + "title": "Recettes et dépenses" + }, + "recent_invoices_card": { + "title": "Factures dûes", + "due_on": "Due le", + "customer": "Client", + "amount_due": "Montant dû", + "actions": "Actions", + "view_all": "Voir tout" + }, + "recent_estimate_card": { + "title": "Devis récents", + "date": "Date", + "customer": "Client", + "amount_due": "Montant dû", + "actions": "Actions", + "view_all": "Voir tout" + } + }, + "tax_types": { + "name": "Nom", + "description": "Description", + "percent": "Pourcent", + "compound_tax": "Taxe composée" + }, + "global_search": { + "search": "Rechercher...", + "customers": "Les clients", + "users": "Utilisateurs", + "no_results_found": "Aucun résultat" + }, + "customers": { + "title": "Clients", + "add_customer": "Ajouter un client", + "contacts_list": "Liste de clients", + "name": "Nom", + "mail": "Email | Emails", + "statement": "Statement", + "display_name": "Statut et Nom de la société", + "primary_contact_name": "Nom du contact principal", + "contact_name": "Nom du contact", + "amount_due": "Montant dû", + "email": "Email", + "address": "Adresse", + "phone": "Téléphone", + "website": "Site Internet", + "overview": "Aperçu", + "enable_portal": "Activer le portail", + "country": "Pays", + "state": "État", + "city": "Ville", + "zip_code": "Code postal", + "added_on": "Ajouté le", + "action": "action", + "password": "Mot de passe", + "street_number": "Numéro de rue", + "primary_currency": "Devise principale", + "description": "Description", + "add_new_customer": "Ajouter un nouveau client", + "save_customer": "Enregistrer le client", + "update_customer": "Mettre à jour le client", + "customer": "Client | Clients", + "new_customer": "Nouveau client", + "edit_customer": "Modifier le client", + "basic_info": "Informations de base", + "billing_address": "Adresse de facturation", + "shipping_address": "Adresse de livraison", + "copy_billing_address": "Copier depuis l'adresse de facturation", + "no_customers": "Vous n’avez pas encore de clients !", + "no_customers_found": "Aucun client !", + "no_contact": "No contact", + "no_contact_name": "No contact name", + "list_of_customers": "Cette section contiendra la liste des clients.", + "primary_display_name": "Nom d'affichage principal", + "select_currency": "Sélectionnez la devise", + "select_a_customer": "Sélectionnez un client", + "type_or_click": "Tapez ou cliquez pour sélectionner", + "new_transaction": "Nouvelle transaction", + "no_matching_customers": "Il n'y a aucun client correspondant !", + "phone_number": "Numéro de téléphone", + "create_date": "Date de création", + "confirm_delete": "Vous ne pourrez pas récupérer ce client et les devis, factures et paiements associés. | Vous ne serez pas en mesure de récupérer ces clients et les devis, factures et paiements associés.", + "created_message": "Client créé avec succès", + "updated_message": "Client mis à jour avec succès", + "deleted_message": "Client supprimé avec succès | Les clients supprimés avec succès" + }, + "items": { + "title": "Articles", + "items_list": "Liste d'articles", + "name": "Nom", + "unit": "Unité", + "description": "Description", + "added_on": "Ajouté le", + "price": "Prix", + "date_of_creation": "Date de création", + "not_selected": "No item selected", + "action": "action", + "add_item": "Ajouter un article", + "save_item": "Enregistrer l'article", + "update_item": "Mettre à jour l'article", + "item": "Article | Articles", + "add_new_item": "Ajoute un nouvel objet", + "new_item": "Nouvel article", + "edit_item": "Modifier larticle", + "no_items": "Aucun article !", + "list_of_items": "Cette section contiendra la liste des éléments.", + "select_a_unit": "Sélectionnez l'unité", + "taxes": "Taxes", + "item_attached_message": "Impossible de supprimer un article déjà utilisé", + "confirm_delete": "Vous ne pourrez pas récupérer cet article | Vous ne pourrez pas récupérer ces objets", + "created_message": "Article créé avec succès", + "updated_message": "Article mis à jour avec succès", + "deleted_message": "Article supprimé avec succès | Articles supprimés avec succès" + }, + "estimates": { + "title": "Devis", + "estimate": "Devis | Devis", + "estimates_list": "Liste des devis", + "days": "jours jours", + "months": "mois mois", + "years": "années Année", + "all": "Tout", + "paid": "Payé", + "unpaid": "Non payé", + "customer": "Client", + "ref_no": "Réf.", + "number": "N°", + "amount_due": "MONTANT DÛ", + "partially_paid": "Partiellement payé", + "total": "Total", + "discount": "Remise", + "sub_total": "Sous-total", + "estimate_number": "N°", + "ref_number": "Numéro de référence", + "contact": "Contact", + "add_item": "Ajouter un article", + "date": "Date", + "due_date": "Date d'échéance", + "expiry_date": "Date d'expiration", + "status": "Statut", + "add_tax": "Ajouter une taxe", + "amount": "Montant", + "action": "action", + "notes": "Remarques", + "tax": "Taxe", + "estimate_template": "Modèle de devis", + "convert_to_invoice": "Convertir en facture", + "mark_as_sent": "Marquer comme envoyé", + "send_estimate": "Envoyer le devis", + "resend_estimate": "Renvoyer le devis", + "record_payment": "Enregistrer un paiement", + "add_estimate": "Ajouter un devis", + "save_estimate": "Sauvegarder le devis", + "confirm_conversion": "Vous souhaitez convertir ce devis en facture?", + "conversion_message": "Conversion réussie", + "confirm_send_estimate": "Ce devis sera envoyée par courrier électronique au client.", + "confirm_mark_as_sent": "Ce devis sera marqué comme envoyé", + "confirm_mark_as_accepted": "Ce devis sera marqué comme accepté", + "confirm_mark_as_rejected": "Ce devis sera marqué comme rejeté", + "no_matching_estimates": "Aucune estimation correspondante !", + "mark_as_sent_successfully": "Devis marquée comme envoyée avec succès", + "send_estimate_successfully": "Devis envoyé avec succès", + "errors": { + "required": "Champ requis" + }, + "accepted": "Accepté", + "rejected": "Rejected", + "sent": "Envoyé", + "draft": "Brouillon", + "declined": "Refusé", + "new_estimate": "Nouveau devis", + "add_new_estimate": "Ajouter un devis", + "update_Estimate": "Mise à jour du devis", + "edit_estimate": "Modifier le devis", + "items": "articles", + "Estimate": "Devis | Devis", + "add_new_tax": "Ajouter une taxe", + "no_estimates": "Aucune estimation pour le moment !", + "list_of_estimates": "Cette section contiendra la liste des devis.", + "mark_as_rejected": "Marquer comme rejeté", + "mark_as_accepted": "Marquer comme accepté", + "marked_as_accepted_message": "Devis marqué comme accepté", + "marked_as_rejected_message": "Devis marqué comme rejeté", + "confirm_delete": "Vous ne pourrez pas récupérer ce devis | Vous ne pourrez pas récupérer ces devis", + "created_message": "Devis créé avec succès", + "updated_message": "Devis mise à jour avec succès", + "deleted_message": "Devis supprimé | Devis supprimés", + "something_went_wrong": "quelque chose a mal tourné", + "item": { + "title": "Titre de l'article", + "description": "Description", + "quantity": "Quantité", + "price": "Prix", + "discount": "Remise", + "total": "Total", + "total_discount": "Remise totale", + "sub_total": "Sous-total", + "tax": "Taxe", + "amount": "Montant", + "select_an_item": "Tapez ou cliquez pour sélectionner un article", + "type_item_description": "Taper la description de l'article (facultatif)" + } + }, + "invoices": { + "title": "Factures", + "invoices_list": "Liste des factures", + "days": "jours jours", + "months": "mois mois", + "years": "years années", + "all": "Toutes", + "paid": "Payé", + "unpaid": "Non payé", + "viewed": "Viewed", + "overdue": "Overdue", + "completed": "Completed", + "customer": "CLIENT", + "paid_status": "STATUT DU PAIEMENT", + "ref_no": "Réf.", + "number": "N°", + "amount_due": "MONTANT DÛ", + "partially_paid": "Partiellement payé", + "total": "Total", + "discount": "Remise", + "sub_total": "Sous-total", + "invoice": "Facture | Factures", + "invoice_number": "Numéro de facture", + "ref_number": "Numéro de référence", + "contact": "Contact", + "add_item": "Ajouter un article", + "date": "Date", + "due_date": "Date d'échéance", + "status": "Statut", + "add_tax": "Ajouter une taxe", + "amount": "Montant", + "action": "action", + "notes": "Remarques", + "view": "Voir", + "send_invoice": "Envoyer une facture", + "resend_invoice": "Renvoyer la facture", + "invoice_template": "Modèle de facture", + "template": "Modèle", + "mark_as_sent": "Marquer comme envoyée", + "confirm_send_invoice": "Cette facture sera envoyée par email au client", + "invoice_mark_as_sent": "Cette facture sera marquée comme envoyé", + "confirm_send": "Cette facture sera envoyée par courrier électronique au client.", + "invoice_date": "Date de facturation", + "record_payment": "Enregistrer un paiement", + "add_new_invoice": "Ajouter une facture", + "update_expense": "Enregistrer la dépense", + "edit_invoice": "Modifier la facture", + "new_invoice": "Nouvelle facture", + "save_invoice": "Enregistrer la facture", + "update_invoice": "Mettre à jour la facture", + "add_new_tax": "Ajouter une taxe", + "no_invoices": "Aucune facture pour le moment !", + "list_of_invoices": "Cette section contiendra la liste des factures.", + "select_invoice": "Sélectionnez facture", + "no_matching_invoices": "Aucune facture correspondante !", + "mark_as_sent_successfully": "Facture marquée comme envoyée avec succès", + "invoice_sent_successfully": "Facture envoyée avec succès", + "cloned_successfully": "Facture clonée avec succès", + "clone_invoice": "Dupliquer la facture", + "confirm_clone": "Cette facture sera dupliquée dans une nouvelle facture", + "item": { + "title": "Titre de l'article", + "description": "Description", + "quantity": "Quantité", + "price": "Prix", + "discount": "Remise", + "total": "Total", + "total_discount": "Remise totale", + "sub_total": "Sous-total", + "tax": "Taxe", + "amount": "Montant", + "select_an_item": "Tapez ou cliquez pour sélectionner un élément", + "type_item_description": "Tapez la description de l'article (facultatif)" + }, + "confirm_delete": "Vous ne pourrez pas récupérer cette facture | Vous ne pourrez pas récupérer ces factures", + "created_message": "Facture créée avec succès", + "updated_message": "Facture mise à jour avec succès", + "deleted_message": "La facture a été supprimée | Les factures ont été supprimées", + "marked_as_sent_message": "Facture supprimée avec succès | Factures supprimées avec succès", + "something_went_wrong": "quelque chose a mal tourné", + "invalid_due_amount_message": "Le paiement entré est supérieur au montant total dû pour cette facture. Veuillez vérifier et réessayer" + }, + "payments": { + "title": "Paiements", + "payments_list": "Liste de paiements", + "record_payment": "Enregistrer un paiement", + "customer": "Client", + "date": "Date", + "amount": "Montant", + "action": "action", + "payment_number": "N°", + "payment_mode": "Mode de paiement", + "invoice": "Facture", + "note": "Remarque", + "add_payment": "Ajouter un paiement", + "new_payment": "Nouveau paiement", + "edit_payment": "Modifier le paiement", + "view_payment": "Voir le paiement", + "add_new_payment": "Ajouter un paiement", + "send_payment_receipt": "Envoyer le reçu", + "send_payment": "Envoyer le paiement", + "save_payment": "Enregistrer le paiement", + "update_payment": "Mettre à jour le paiement", + "payment": "Paiement | Paiements", + "no_payments": "Aucun paiement pour le moment !", + "not_selected": "Not selected", + "no_invoice": "No invoice", + "no_matching_payments": "Il n'y a aucun paiement correspondant !", + "list_of_payments": "Cette section contiendra la liste des paiements", + "select_payment_mode": "Sélectionnez le moyen de paiement", + "confirm_mark_as_sent": "Ce devis sera marqué comme envoyé", + "confirm_send_payment": "Ce paiement sera envoyé par email au client", + "send_payment_successfully": "Paiement envoyé avec succès", + "something_went_wrong": "quelque chose a mal tourné", + "confirm_delete": "Vous ne pourrez pas récupérer ce paiement | Vous ne pourrez pas récupérer ces paiements", + "created_message": "Paiement créé avec succès", + "updated_message": "Paiement mis à jour avec succès", + "deleted_message": "Paiement supprimé avec succès | Paiements supprimés avec succès", + "invalid_amount_message": "Le montant du paiement est invalide" + }, + "expenses": { + "title": "Dépenses", + "expenses_list": "Liste des dépenses", + "select_a_customer": "Sélectionnez un client", + "expense_title": "Titre", + "customer": "Client", + "contact": "Contact", + "category": "Catégorie", + "from_date": "A partir de la date", + "to_date": "À ce jour", + "expense_date": "Date", + "description": "Description", + "receipt": "Reçu", + "amount": "Montant", + "action": "action", + "not_selected": "Not selected", + "note": "Remarque", + "category_id": "Identifiant de catégorie", + "date": "Date", + "add_expense": "Ajouter une dépense", + "add_new_expense": "Ajouter une nouvelle dépense", + "save_expense": "Enregistrer la dépense", + "update_expense": "Mettre à jour la dépense", + "download_receipt": "Télécharger le reçu", + "edit_expense": "Modifier la dépense", + "new_expense": "Nouvelle dépense", + "expense": "Dépense | Dépenses", + "no_expenses": "Pas de dépenses pour le moment !", + "list_of_expenses": "Cette section contiendra la liste des dépenses.", + "confirm_delete": "Vous ne pourrez pas récupérer cette dépense | Vous ne pourrez pas récupérer ces dépenses", + "created_message": "Dépense créée avec succès", + "updated_message": "Dépense mise à jour avec succès", + "deleted_message": "Dépense supprimée avec succès | Dépenses supprimées avec succès", + "categories": { + "categories_list": "Liste des catégories", + "title": "Titre", + "name": "Nom", + "description": "Description", + "amount": "Montant", + "actions": "Actions", + "add_category": "Ajouter une catégorie", + "new_category": "Nouvelle catégorie", + "category": "Catégorie | Catégories", + "select_a_category": "Choisissez une catégorie" + } + }, + "login": { + "email": "Email", + "password": "Mot de passe", + "forgot_password": "Mot de passe oublié ?", + "or_signIn_with": "ou connectez-vous avec", + "login": "S'identifier", + "register": "S'inscrire", + "reset_password": "Réinitialiser le mot de passe", + "password_reset_successfully": "Réinitialisation du mot de passe réussie", + "enter_email": "Entrer l'email", + "enter_password": "Entrer le mot de passe", + "retype_password": "Retaper le mot de passe" + }, + "users": { + "title": "Utilisateurs", + "users_list": "Liste des utilisateurs", + "name": "Nom", + "description": "Description", + "added_on": "Ajouté le", + "date_of_creation": "Date de création", + "action": "action", + "add_user": "Ajouter un utilisateur", + "save_user": "Enregistrer l'utilisateur", + "update_user": "Mettre à jour l'utilisateur", + "user": "Utilisateur | Utilisateurs", + "add_new_user": "Ajouter un nouvel utilisateur", + "new_user": "Nouvel utilisateur", + "edit_user": "Modifier l'utilisateur", + "no_users": "Pas encore d'utilisateurs !", + "list_of_users": "Cette section contiendra la liste des utilisateurs.", + "email": "Email", + "phone": "Téléphone", + "password": "Mot de passe", + "user_attached_message": "Impossible de supprimer un élément déjà utilisé", + "confirm_delete": "Vous ne pourrez pas récupérer cet utilisateur | Vous ne pourrez pas récupérer ces utilisateurs", + "created_message": "L'utilisateur a été créé avec succès", + "updated_message": "L'utilisateur a bien été mis à jour", + "deleted_message": "Utilisateur supprimé avec succès | Utilisateur a bien été supprimé" + }, + "reports": { + "title": "Rapport", + "from_date": "À partir du", + "to_date": "Jusqu'au", + "status": "Statut", + "paid": "Payé", + "unpaid": "Non payé", + "download_pdf": "Télécharger le PDF", + "view_pdf": "Voir le PDF", + "update_report": "Mettre à jour le rapport", + "report": "Rapport | Rapports", + "profit_loss": { + "profit_loss": "Bénéfices & Pertes", + "to_date": "Au", + "from_date": "Du", + "date_range": "Sélectionner une plage de dates" + }, + "sales": { + "sales": "Ventes", + "date_range": "Sélectionner une plage de dates", + "to_date": "À ce jour", + "from_date": "A partir de la date", + "report_type": "Type de rapport" + }, + "taxes": { + "taxes": "Les taxes", + "to_date": "À ce jour", + "from_date": "À partir du", + "date_range": "Sélectionner une plage de dates" + }, + "errors": { + "required": "Champ requis" + }, + "invoices": { + "invoice": "Facture", + "invoice_date": "Date de facturation", + "due_date": "Date déchéance", + "amount": "Montant ", + "contact_name": "Nom du contact", + "status": "Statut" + }, + "estimates": { + "estimate": "Devis", + "estimate_date": "Date du devis", + "due_date": "Date d'échéance", + "estimate_number": "N°", + "ref_number": "Numéro de référence", + "amount": "Montant", + "contact_name": "Nom du contact", + "status": "Statut" + }, + "expenses": { + "expenses": "Dépenses", + "category": "Catégorie", + "date": "Date", + "amount": "Montant", + "to_date": "Jusqu'au", + "from_date": "À partir du", + "date_range": "Sélectionner une plage de dates" + } + }, + "settings": { + "menu_title": { + "account_settings": "Paramètres du compte", + "company_information": "Informations sur la société", + "customization": "Personnalisation", + "preferences": "Préférences", + "notifications": "Notifications", + "tax_types": "Types de taxe", + "expense_category": "Catégories de dépenses", + "update_app": "Mise à jour de l'application", + "backup": "Sauvegarde", + "file_disk": "Espace de stockage", + "custom_fields": "Champs personnalisés", + "payment_modes": "Moyens de paiement", + "notes": "Remarques" + }, + "title": "Paramètres", + "setting": "Paramètres | Paramètres", + "general": "Paramètres généraux", + "language": "Langue", + "primary_currency": "Devise principale", + "timezone": "Fuseau horaire", + "date_format": "Format de date", + "currencies": { + "title": "Devises", + "currency": "Devise | Devises", + "currencies_list": "Liste des devises", + "select_currency": "Sélectionnez la devise", + "name": "Nom", + "code": "Code ", + "symbol": "Symbole", + "precision": "Précision", + "thousand_separator": "Séparateur de milliers", + "decimal_separator": "Séparateur décimal", + "position": "Position", + "position_of_symbol": "Position du symbole", + "right": "Droite", + "left": "Gauche", + "action": "action", + "add_currency": "Ajouter une devise" + }, + "mail": { + "host": "Adresse du serveur", + "port": "Port", + "driver": "Pilote de courrier", + "secret": "Secret", + "mailgun_secret": "Mailgun Secret", + "mailgun_domain": "Domaine", + "mailgun_endpoint": "Mailgun Endpoint", + "ses_secret": "SES Secret", + "ses_key": "SES Key", + "password": "Mot de passe", + "username": "Nom d'utilisateur", + "mail_config": "Configuration des emails", + "from_name": "Nom de l'expéditeur", + "from_mail": "Email de l'expéditeur", + "encryption": "Chiffrement", + "mail_config_desc": "Vous pouvez modifier ci-dessous les paramètres d'envoi des emails. Vous pourrez modifier à tout moment." + }, + "pdf": { + "title": "Paramètre PDF", + "footer_text": "Pied de page", + "pdf_layout": "Mise en page PDF" + }, + "company_info": { + "company_info": "Information de l'entreprise", + "company_name": "Nom de l'entreprise", + "company_logo": "Logo de l'entreprise", + "section_description": "Informations sur votre entreprise qui figureront sur les factures, devis et autres documents créés par Crater.", + "phone": "Téléphone", + "country": "Pays", + "state": "État", + "city": "Ville", + "address": "Adresse", + "zip": "Code postal", + "save": "Sauvegarder", + "updated_message": "Informations sur la société mises à jour avec succès" + }, + "custom_fields": { + "title": "Champs personnalisés", + "section_description": "Personnalisez vos factures, devis et reçus de paiement avec vos propres champs. Assurez-vous d'utiliser les champs ajoutés ci-dessous sur les formats d'adresse sur la page des paramètres de personnalisation.", + "add_custom_field": "Ajouter un champ personnalisé", + "edit_custom_field": "Modifier un champ personnalisé", + "field_name": "Nom du champs", + "label": "Étiquette", + "type": "Type ", + "name": "Nom", + "required": "Obligatoire", + "placeholder": "Espace réservé", + "help_text": "Texte d'aide", + "default_value": "Valeur par défaut", + "prefix": "Préfixe", + "starting_number": "Numéro de départ", + "model": "Modèle", + "help_text_description": "Saisissez du texte pour aider les utilisateurs à comprendre l'objectif de ce champ personnalisé.", + "suffix": "Suffixe", + "yes": "Oui", + "no": "Non", + "order": "Ordre", + "custom_field_confirm_delete": "Vous ne pourrez pas récupérer ce champ personnalisé", + "already_in_use": "Le champ personnalisé est déjà utilisé", + "deleted_message": "Champ personnalisé supprimé avec succès", + "options": "les options", + "add_option": "Ajouter des options", + "add_another_option": "Ajouter une autre option", + "sort_in_alphabetical_order": "Trier par ordre alphabétique", + "add_options_in_bulk": "Ajouter des options en masse", + "use_predefined_options": "Utiliser des options prédéfinies", + "select_custom_date": "Sélectionnez une date personnalisée", + "select_relative_date": "Sélectionnez la date relative", + "ticked_by_default": "Coché par défaut", + "updated_message": "Champ personnalisé mis à jour avec succès", + "added_message": "Champ personnalisé ajouté avec succès" + }, + "customization": { + "customization": "Personnalisation", + "save": "Sauvegarder", + "addresses": { + "title": "Adresses", + "section_description": "Vous pouvez définir le format de l'adresse de facturation et de livraison du client (affiché en PDF uniquement). ", + "customer_billing_address": "Adresse de paiement", + "customer_shipping_address": "Adresse de livraison", + "company_address": "Adresse de l'entreprise", + "insert_fields": "Ajouter des champs", + "contact": "Contact", + "address": "Adresse", + "display_name": "Nom", + "primary_contact_name": "Nom du contact principal", + "email": "Email", + "website": "Site Internet", + "name": "Nom", + "country": "Pays", + "state": "Etat", + "city": "Ville", + "company_name": "Nom de l'entreprise", + "address_street_1": "Rue", + "address_street_2": "Complément", + "phone": "Téléphone", + "zip_code": "Code postal", + "address_setting_updated": "Adresse mise à jour avec succès" + }, + "updated_message": "Informations de l'entreprise mises à jour", + "invoices": { + "title": "Factures", + "notes": "Remarques", + "invoice_prefix": "Préfixe", + "default_invoice_email_body": "Corps de l'e-mail de la facture par défaut", + "invoice_settings": "Paramètres", + "autogenerate_invoice_number": "Générer automatiquement le numéro de facture", + "autogenerate_invoice_number_desc": "Désactivez cette option si vous ne souhaitez pas générer automatiquement les numéros de facture à chaque fois que vous en créez une nouvelle.", + "enter_invoice_prefix": "Ajouter le préfixe de facture", + "terms_and_conditions": "Termes et conditions", + "company_address_format": "Format d'adresse de l'entreprise", + "shipping_address_format": "Format d'adresse d'expédition", + "billing_address_format": "Format d'adresse de facturation", + "invoice_settings_updated": "Paramètres de facturation mis à jour" + }, + "estimates": { + "title": "Devis", + "estimate_prefix": "Préfixe des devis", + "default_estimate_email_body": "Corps de l'e-mail estimé par défaut", + "estimate_settings": "Paramètre", + "autogenerate_estimate_number": "Générer automatiquement le numéro de devis", + "estimate_setting_description": "Désactivez cette option si vous ne souhaitez pas générer automatiquement les numéros de devis à chaque fois que vous en créez un nouveau.", + "enter_estimate_prefix": "Entrez le préfixe d'estimation", + "estimate_setting_updated": "Paramètres de devis mis à jour", + "company_address_format": "Format d'adresse de l'entreprise", + "billing_address_format": "Format d'adresse de facturation", + "shipping_address_format": "Format d'adresse d'expédition" + }, + "payments": { + "title": "Paiements", + "description": "Modes de transaction pour les paiements", + "payment_prefix": "Préfixe", + "default_payment_email_body": "Corps de l'e-mail de paiement par défaut", + "payment_settings": "Paramètres", + "autogenerate_payment_number": "Générer automatiquement le numéro de paiement", + "payment_setting_description": "Désactivez cette option si vous ne souhaitez pas générer automatiquement les numéros de paiement à chaque fois que vous en créez un nouveau.", + "enter_payment_prefix": "Entrez le préfixe de paiement", + "payment_setting_updated": "Les paramètres de paiement ont bien été mis à jour", + "payment_modes": "Moyens de paiement", + "add_payment_mode": "Ajouter un mode de paiement", + "edit_payment_mode": "Modifier le moyen de paiement", + "mode_name": "Nom", + "payment_mode_added": "Moyen de paiement ajouté", + "payment_mode_updated": "Moyen de paiement mis à jour", + "payment_mode_confirm_delete": "Êtes-vous sur de supprimer ce moyen de paiement", + "already_in_use": "Ce moyen de paiement existe déjà", + "deleted_message": "Moyen de paiement supprimé avec succès", + "company_address_format": "Format d'adresse de l'entreprise", + "from_customer_address_format": "À partir du format d'adresse client" + }, + "items": { + "title": "Articles", + "units": "Unités", + "add_item_unit": "Ajouter une unité", + "edit_item_unit": "Modifier l'unité d'élément", + "unit_name": "Nom", + "item_unit_added": "Unité ajoutée", + "item_unit_updated": "Unité mis à jour", + "item_unit_confirm_delete": "Êtes-vous sur de supprimer cette unité ?", + "already_in_use": "Cette unité existe déjà", + "deleted_message": "Unité supprimée avec succès" + }, + "notes": { + "title": "Remarques", + "description": "Gagnez du temps en créant des notes et en les réutilisant sur vos factures, devis et paiements.", + "notes": "Remarques", + "type": "Type ", + "add_note": "Ajouter une note", + "add_new_note": "Ajouter une nouvelle note", + "name": "Nom", + "edit_note": "Modifier la note", + "note_added": "Note ajoutée", + "note_updated": "Note mise à jour", + "note_confirm_delete": "Vous ne pourrez pas récupérer cette note", + "already_in_use": "La note est déjà utilisée", + "deleted_message": "Note supprimée avec succès" + } + }, + "account_settings": { + "profile_picture": "Image de profil", + "name": "Nom", + "email": "Email", + "password": "Mot de passe", + "confirm_password": "Confirmez le mot de passe", + "account_settings": "Paramètres du compte", + "save": "Sauvegarder", + "section_description": "Vous pouvez mettre à jour votre nom, votre email et votre mot de passe en utilisant le formulaire ci-dessous.", + "updated_message": "Paramètres du compte mis à jour avec succès" + }, + "user_profile": { + "name": "Nom", + "email": "Email", + "password": "Mot de passe", + "confirm_password": "Confirmez le mot de passe" + }, + "notification": { + "title": "Notification", + "email": "Envoyer des notifications à", + "description": "Quelles notifications par courrier électronique souhaitez-vous recevoir lorsque quelque chose change?", + "invoice_viewed": "Facture consultée", + "invoice_viewed_desc": "Lorsque le client visualise la facture envoyée via le tableau de bord de Neptune.", + "estimate_viewed": "Devis consulté", + "estimate_viewed_desc": "Lorsque le client visualise le devis envoyé via le tableau de bord de Neptune.", + "save": "Sauvegarder", + "email_save_message": "Email enregistré avec succès", + "please_enter_email": "Veuillez entrer un email" + }, + "tax_types": { + "title": "Types de taxe", + "add_tax": "Ajouter une taxe", + "edit_tax": "Modifier la taxe", + "description": "Vous pouvez ajouter ou supprimer des taxes à votre guise. Crater prend en charge les taxes sur les articles individuels ainsi que sur la facture.", + "add_new_tax": "Ajouter une nouvelle taxe", + "tax_settings": "Paramètres de taxe", + "tax_per_item": "Taxe par article", + "tax_name": "Nom de la taxe", + "compound_tax": "Taxe composée", + "percent": "Pourcentage", + "action": "action", + "tax_setting_description": "Activez cette option si vous souhaitez ajouter des taxes à des postes de facture individuels. Par défaut, les taxes sont ajoutées directement à la facture.", + "created_message": "Type de taxe créé avec succès", + "updated_message": "Type de taxe mis à jour avec succès", + "deleted_message": "Type de taxe supprimé avec succès", + "confirm_delete": "Vous ne pourrez pas récupérer ce type de taxe", + "already_in_use": "La taxe est déjà utilisée" + }, + "expense_category": { + "title": "Catégories de dépenses", + "action": "action", + "description": "Des catégories sont requises pour ajouter des entrées de dépenses. Vous pouvez ajouter ou supprimer ces catégories selon vos préférences.", + "add_new_category": "Ajouter une nouvelle catégorie", + "add_category": "Ajouter une catégorie", + "edit_category": "Modifier la catégorie", + "category_name": "Nom de catégorie", + "category_description": "Description", + "created_message": "Catégorie de dépenses créée avec succès", + "deleted_message": "La catégorie de dépenses a été supprimée avec succès", + "updated_message": "Catégorie de dépenses mise à jour avec succès", + "confirm_delete": "Vous ne pourrez pas récupérer cette catégorie de dépenses", + "already_in_use": "La catégorie est déjà utilisée" + }, + "preferences": { + "currency": "Devise", + "default_language": "Langue par défaut", + "time_zone": "Fuseau horaire", + "fiscal_year": "Exercice fiscal", + "date_format": "Format de date", + "discount_setting": "Réglage de remise", + "discount_per_item": "Remise par article", + "discount_setting_description": "Activez cette option si vous souhaitez ajouter une remise à des postes de facture individuels. Par défaut, les remises sont ajoutées directement à la facture.", + "save": "Sauvegarder", + "preference": "Préférence | Préférences", + "general_settings": "Préférences par défaut pour le système.", + "updated_message": "Préférences mises à jour avec succès", + "select_language": "Choisir la langue", + "select_time_zone": "Sélectionnez le fuseau horaire", + "select_date_format": "Sélectionnez le format de date", + "select_financial_year": "sélectionner lexercice" + }, + "update_app": { + "title": "Mise à jour de l'application", + "description": "Vous pouvez facilement mettre à jour Crater en cliquant sur le bouton ci-dessous", + "check_update": "Vérifier les mises à jour", + "avail_update": "Nouvelle mise à jour disponible", + "next_version": "Version suivante", + "requirements": "Spécifications requises", + "update": "Mettre à jour maintenant", + "update_progress": "Mise à jour en cours...", + "progress_text": "Cela ne prendra que quelques minutes. Veuillez ne pas actualiser ou fermer la fenêtre avant la fin de la mise à jour", + "update_success": "App a été mis à jour ! Veuillez patienter pendant le rechargement automatique de la fenêtre de votre navigateur.", + "latest_message": "Pas de mise a jour disponible ! Vous êtes sur la dernière version.", + "current_version": "Version actuelle", + "download_zip_file": "Télécharger le fichier ZIP", + "unzipping_package": "Dézipper le package", + "copying_files": "Copie de fichiers en cours", + "running_migrations": "Migrations en cours", + "finishing_update": "Finalisation de la mise à jour", + "update_failed": "Échec de la mise à jour", + "update_failed_text": "Désolé ! Votre mise à jour a échoué à: {step} étape" + }, + "backup": { + "title": "Sauvegarde | Sauvegardes", + "description": "La sauvegarde est un fichier ZIP qui contient tous les fichiers des répertoires que vous spécifiez, ainsi qu'un export de la base de données", + "new_backup": "Ajouter une nouvelle sauvegarde", + "create_backup": "Créer une sauvegarde", + "select_backup_type": "Sélectionnez le type de sauvegarde", + "backup_confirm_delete": "Vous ne pourrez pas récupérer cette sauvegarde", + "path": "chemin", + "new_disk": "Nouvel espace de stockage", + "created_at": "créé à", + "size": "taille", + "dropbox": "dropbox", + "local": "local", + "healthy": "en bonne santé", + "amount_of_backups": "nombre de sauvegardes", + "newest_backups": "dernières sauvegardes", + "used_storage": "Stockage utilisé", + "select_disk": "Sélectionnez l'espace de stockage", + "action": "action", + "deleted_message": "Sauvegarde supprimée avec succès", + "created_message": "Sauvegarde créée avec succès", + "invalid_disk_credentials": "Informations d'identification invalides de l'espace de stockage" + }, + "disk": { + "title": "Espace de stockage | Espaces de stockage", + "description": "Par défaut, Crater utilisera votre disque local pour enregistrer les sauvegardes, l'avatar et d'autres fichiers image. Vous pouvez configurer plusieurs pilotes de disque comme DigitalOcean, S3 et Dropbox selon vos préférences.", + "created_at": "créé à", + "dropbox": "dropbox", + "name": "Nom", + "driver": "Pilote", + "disk_type": "Type ", + "disk_name": "Nom", + "new_disk": "Ajouter un nouvel espace de stockage", + "filesystem_driver": "Pilote du système de fichiers", + "local_driver": "pilote local", + "local_root": "répertoire local", + "public_driver": "Pilote public", + "public_root": "Répertoire public", + "public_url": "URL publique", + "public_visibility": "Visibilité publique", + "media_driver": "Pilote multimédia", + "media_root": "Répertoire média", + "aws_driver": "Pilote AWS", + "aws_key": "AWS Key", + "aws_secret": "AWS Secret", + "aws_region": "Région AWS", + "aws_bucket": "Bucket", + "aws_root": "Répertoire", + "do_spaces_type": "Type", + "do_spaces_key": "Key", + "do_spaces_secret": "Secret", + "do_spaces_region": "Région", + "do_spaces_bucket": "Bucket", + "do_spaces_endpoint": "Endpoint", + "do_spaces_root": "Répertoire", + "dropbox_type": "Type", + "dropbox_token": "Token", + "dropbox_key": "Key", + "dropbox_secret": "Secret", + "dropbox_app": "Application", + "dropbox_root": "Répertoire", + "default_driver": "Fournisseur par défaut", + "is_default": "Par défaut", + "set_default_disk": "Définir l'espace par défaut", + "success_set_default_disk": "L'espace par défaut défini avec succès", + "save_pdf_to_disk": "Enregistrer les PDF sur le disque", + "disk_setting_description": "Activez cette option si vous souhaitez enregistrer automatiquement une copie de chaque facture, devis et reçu de paiement PDF sur votre disque par défaut. L'activation de cette option réduira le temps de chargement lors de l'affichage des PDF.", + "select_disk": "Sélectionnez le stockage", + "disk_settings": "Paramètres de stockage", + "confirm_delete": "Vos fichiers et dossiers existants sur le disque spécifié ne seront pas affectés, mais la configuration de votre disque sera supprimée de Crater", + "action": "action", + "edit_file_disk": "Modifier le disque de fichiers", + "success_create": "Disque ajouté avec succès", + "success_update": "Disque mis à jour avec succès", + "error": "L'ajout de disque a échoué", + "deleted_message": "Stockage supprimé", + "disk_variables_save_successfully": "Stockage configuré avec succès", + "disk_variables_save_error": "La configuration du stockage a échoué.", + "invalid_disk_credentials": "Informations d'identification non valides du stockage sélectionné" + } + }, + "wizard": { + "account_info": "Information du compte", + "account_info_desc": "Les détails ci-dessous seront utilisés pour créer le compte administrateur principal. Aussi, vous pouvez modifier les détails à tout moment après la connexion.", + "name": "Nom", + "email": "Email", + "password": "Mot de passe", + "confirm_password": "Confirmez le mot de passe", + "save_cont": "Enregistrer et poursuivre", + "company_info": "Informations sur la société", + "company_info_desc": "Ces informations seront affichées sur les factures. Notez que vous pouvez éditer ceci plus tard sur la page des paramètres.", + "company_name": "Nom de l'entreprise", + "company_logo": "Logo de l'entreprise", + "logo_preview": "Aperçu du logo", + "preferences": "Préférences", + "preferences_desc": "Préférences par défaut du système.", + "country": "Pays", + "state": "État", + "city": "Ville", + "address": "Adresse", + "street": "Rue 1 | Rue 2", + "phone": "Téléphone", + "zip_code": "Code postal", + "go_back": "Revenir", + "currency": "Devise", + "language": "Langue", + "time_zone": "Fuseau horaire", + "fiscal_year": "Exercice fiscal", + "date_format": "Format de date", + "from_address": "De l'adresse", + "username": "Nom d'utilisateur", + "next": "Suivant", + "continue": "Poursuivre", + "skip": "Ignorer", + "database": { + "database": "URL du site et base de données", + "connection": "Connexion à la base de données", + "host": "Serveur de la base de données", + "port": "Port de la base de données", + "password": "Mot de passe de la base de données", + "app_url": "Application URL", + "app_domain": "Nom de domaine", + "username": "Nom d'utilisateur de la base de données", + "db_name": "Nom de la base de données", + "db_path": "Emplacement de la base de données", + "desc": "Créez une base de données sur votre serveur et définissez les informations d'identification à l'aide du formulaire ci-dessous." + }, + "permissions": { + "permissions": "Permissions", + "permission_confirm_title": "Êtes-vous certain de vouloir continuer ?", + "permission_confirm_desc": "La vérification des permissions du dossier a échoué", + "permission_desc": "Vous trouverez ci-dessous la liste des permissions de dossier requises pour le fonctionnement de l'application. Si la vérification des permissions échoue, veillez mettre à jour vos permissions de dossier." + }, + "mail": { + "host": "Serveur email", + "port": "Port", + "driver": "Fournisseur d'email", + "secret": "Secret", + "mailgun_secret": "Secret", + "mailgun_domain": "Nom de domaine", + "mailgun_endpoint": "Endpoint", + "ses_secret": "Secret", + "ses_key": "Key", + "password": "Mot de passe", + "username": "Nom d'utilisateur", + "mail_config": "Configuration des emails", + "from_name": "Nom de messagerie", + "from_mail": "Email de l'expéditeur", + "encryption": "Chiffrement des emails", + "mail_config_desc": "Les détails ci-dessous seront utilisés pour mettre à jour le fournisseur de messagerie. Vous pourrez modifier ceux-ci à tout moment après la connexion." + }, + "req": { + "system_req": "Configuration requise", + "php_req_version": "Php (version {version} nécessaire)", + "check_req": "Vérifier les prérequis", + "system_req_desc": "Crater a quelques prérequis. Assurez-vous que votre serveur dispose de la version Php requise et de toutes les extensions mentionnées ci-dessous." + }, + "errors": { + "migrate_failed": "Échec de la migration", + "database_variables_save_error": "Impossible de créer le fichier de configuration. Veuillez vérifier les permissions du répertoire", + "mail_variables_save_error": "La configuration du courrier électronique a échoué.", + "connection_failed": "La connexion à la base de données a échoué", + "database_should_be_empty": "La base de données devrait être vide" + }, + "success": { + "mail_variables_save_successfully": "Email configuré avec succès", + "database_variables_save_successfully": "Base de données configurée avec succès." + } + }, + "validation": { + "invalid_phone": "Numéro de téléphone invalide", + "invalid_url": "URL invalide (ex: http://www.craterapp.com)", + "invalid_domain_url": "URL invalide (ex: craterapp.com)", + "required": "Champ requis", + "email_incorrect": "Adresse Email incorrecte.", + "email_already_taken": "Un compte est déjà associé à cette adresse e-mail.", + "email_does_not_exist": "Cet utilisateur n'existe pas", + "item_unit_already_taken": "Cette unité est déjà été utilisée", + "payment_mode_already_taken": "Ce moyen de paiement est déjà utilisé", + "send_reset_link": "Envoyer le lien de réinitialisation", + "not_yet": "Pas encore reçu ? Réessayer", + "password_min_length": "Le mot de passe doit contenir {nombre} caractères", + "name_min_length": "Le nom doit avoir au moins {count} lettres.", + "enter_valid_tax_rate": "Entrez un taux de taxe valide", + "numbers_only": "Chiffres uniquement.", + "characters_only": "Caractères seulement.", + "password_incorrect": "Les mots de passe doivent être identiques", + "password_length": "Le mot de passe doit comporter au moins {count} caractères.", + "qty_must_greater_than_zero": "La quantité doit être supérieure à zéro.", + "price_greater_than_zero": "Le prix doit être supérieur à zéro.", + "payment_greater_than_zero": "Le paiement doit être supérieur à zéro.", + "payment_greater_than_due_amount": "Le paiement saisi est plus élevé que le montant dû de cette facture.", + "quantity_maxlength": "La quantité ne doit pas dépasser 20 chiffres.", + "price_maxlength": "Le prix ne doit pas dépasser 20 chiffres.", + "price_minvalue": "Le prix doit être supérieur à 0.", + "amount_maxlength": "Le montant ne doit pas dépasser 20 chiffres.", + "amount_minvalue": "Le montant doit être supérieur à 0.", + "description_maxlength": "La description ne doit pas dépasser 255 caractères.", + "subject_maxlength": "L'objet ne doit pas dépasser 100 caractères.", + "message_maxlength": "Le message ne doit pas dépasser 255 caractères.", + "maximum_options_error": "Maximum de {max} options sélectionnées. Commencez par supprimer une option sélectionnée pour en sélectionner une autre.", + "notes_maxlength": "Les notes ne doivent pas dépasser 255 caractères.", + "address_maxlength": "L'adresse ne doit pas dépasser 255 caractères.", + "ref_number_maxlength": "Le numéro de référence ne doit pas dépasser 255 caractères.", + "prefix_maxlength": "Le préfixe ne doit pas dépasser 5 caractères.", + "something_went_wrong": "quelque chose a mal tourné" + }, + "pdf_estimate_label": "Devis", + "pdf_estimate_number": "N°", + "pdf_estimate_date": "Date du devis", + "pdf_estimate_expire_date": "Date d'expiration", + "pdf_invoice_label": "Facture", + "pdf_invoice_number": "Numéro de facture", + "pdf_invoice_date": "Date", + "pdf_invoice_due_date": "Date d’échéance", + "pdf_notes": "Remarques", + "pdf_items_label": "Articles", + "pdf_quantity_label": "Quantité", + "pdf_price_label": "Prix", + "pdf_discount_label": "Remise", + "pdf_amount_label": "Montant", + "pdf_subtotal": "Sous-total", + "pdf_total": "Total", + "pdf_payment_label": "Payment", + "pdf_payment_receipt_label": "Reçu de paiement", + "pdf_payment_date": "Date de paiement", + "pdf_payment_number": "N°", + "pdf_payment_mode": "Moyen de paiement", + "pdf_payment_amount_received_label": "Montant reçu", + "pdf_expense_report_label": "RAPPORT DE DÉPENSES", + "pdf_total_expenses_label": "TOTAL DES DÉPENSES", + "pdf_profit_loss_label": "RAPPORT DES BÉNÉFICES ET DES PERTES", + "pdf_sales_customers_label": "Sales Customer Report", + "pdf_sales_items_label": "Sales Item Report", + "pdf_tax_summery_label": "Tax Summary Report", + "pdf_income_label": "REVENU", + "pdf_net_profit_label": "BÉNÉFICE NET", + "pdf_customer_sales_report": "Rapport de ventes : par client", + "pdf_total_sales_label": "TOTAL DES VENTES", + "pdf_item_sales_label": "Rapport des ventes : par article", + "pdf_tax_report_label": "RAPPORT DES TAXES", + "pdf_total_tax_label": "TOTAL DES TAXES", + "pdf_tax_types_label": "Types de taxe", + "pdf_expenses_label": "Dépenses", + "pdf_bill_to": "facturer,", + "pdf_ship_to": "Envoyer à,", + "pdf_received_from": "Reçu de :", + "pdf_tax_label": "Tax" +} diff --git a/resources/scripts/locales/hi.json b/resources/scripts/locales/hi.json new file mode 100644 index 000000000..4113ec52d --- /dev/null +++ b/resources/scripts/locales/hi.json @@ -0,0 +1,1145 @@ +{ + "navigation": { + "dashboard": "डैशबोर्ड", + "customers": "Customers", + "items": "Items", + "invoices": "Invoices", + "expenses": "Expenses", + "estimates": "Estimates", + "payments": "Payments", + "reports": "Reports", + "settings": "Settings", + "logout": "Logout", + "users": "Users" + }, + "general": { + "add_company": "Add Company", + "view_pdf": "View PDF", + "copy_pdf_url": "Copy PDF Url", + "download_pdf": "Download PDF", + "save": "Save", + "create": "Create", + "cancel": "Cancel", + "update": "Update", + "deselect": "Deselect", + "download": "Download", + "from_date": "From Date", + "to_date": "To Date", + "from": "From", + "to": "To", + "sort_by": "Sort By", + "ascending": "Ascending", + "descending": "Descending", + "subject": "Subject", + "body": "Body", + "message": "Message", + "send": "Send", + "go_back": "Go Back", + "back_to_login": "Back to Login?", + "home": "Home", + "filter": "Filter", + "delete": "Delete", + "edit": "Edit", + "view": "View", + "add_new_item": "Add New Item", + "clear_all": "Clear All", + "showing": "Showing", + "of": "of", + "actions": "Actions", + "subtotal": "SUBTOTAL", + "discount": "DISCOUNT", + "fixed": "Fixed", + "percentage": "Percentage", + "tax": "TAX", + "total_amount": "TOTAL AMOUNT", + "bill_to": "Bill to", + "ship_to": "Ship to", + "due": "Due", + "draft": "Draft", + "sent": "Sent", + "all": "All", + "select_all": "Select All", + "choose_file": "Click here to choose a file", + "choose_template": "Choose a template", + "choose": "Choose", + "remove": "Remove", + "select_a_status": "Select a status", + "select_a_tax": "Select a tax", + "search": "Search", + "are_you_sure": "Are you sure?", + "list_is_empty": "List is empty.", + "no_tax_found": "No tax found!", + "four_zero_four": "404", + "you_got_lost": "Whoops! You got Lost!", + "go_home": "Go Home", + "test_mail_conf": "Test Mail Configuration", + "send_mail_successfully": "Mail sent successfully", + "setting_updated": "Setting updated successfully", + "select_state": "Select state", + "select_country": "Select Country", + "select_city": "Select City", + "street_1": "Street 1", + "street_2": "Street 2", + "action_failed": "Action Failed", + "retry": "Retry", + "choose_note": "Choose Note", + "no_note_found": "No Note Found", + "insert_note": "Insert Note" + }, + "dashboard": { + "select_year": "Select year", + "cards": { + "due_amount": "Amount Due", + "customers": "Customers", + "invoices": "Invoices", + "estimates": "Estimates" + }, + "chart_info": { + "total_sales": "Sales", + "total_receipts": "Receipts", + "total_expense": "Expenses", + "net_income": "Net Income", + "year": "Select year" + }, + "monthly_chart": { + "title": "Sales & Expenses" + }, + "recent_invoices_card": { + "title": "Due Invoices", + "due_on": "Due On", + "customer": "Customer", + "amount_due": "Amount Due", + "actions": "Actions", + "view_all": "View All" + }, + "recent_estimate_card": { + "title": "Recent Estimates", + "date": "Date", + "customer": "Customer", + "amount_due": "Amount Due", + "actions": "Actions", + "view_all": "View All" + } + }, + "tax_types": { + "name": "Name", + "description": "Description", + "percent": "Percent", + "compound_tax": "Compound Tax" + }, + "global_search": { + "search": "Search...", + "customers": "Customers", + "users": "Users", + "no_results_found": "No Results Found" + }, + "customers": { + "title": "Customers", + "add_customer": "Add Customer", + "contacts_list": "Customer List", + "name": "Name", + "mail": "Mail | Mails", + "statement": "Statement", + "display_name": "Display Name", + "primary_contact_name": "Primary Contact Name", + "contact_name": "Contact Name", + "amount_due": "Amount Due", + "email": "Email", + "address": "Address", + "phone": "Phone", + "website": "Website", + "overview": "Overview", + "enable_portal": "Enable Portal", + "country": "Country", + "state": "State", + "city": "City", + "zip_code": "Zip Code", + "added_on": "Added On", + "action": "Action", + "password": "Password", + "street_number": "Street Number", + "primary_currency": "Primary Currency", + "description": "Description", + "add_new_customer": "Add New Customer", + "save_customer": "Save Customer", + "update_customer": "Update Customer", + "customer": "Customer | Customers", + "new_customer": "New Customer", + "edit_customer": "Edit Customer", + "basic_info": "Basic Info", + "billing_address": "Billing Address", + "shipping_address": "Shipping Address", + "copy_billing_address": "Copy from Billing", + "no_customers": "No customers yet!", + "no_customers_found": "No customers found!", + "no_contact": "No contact", + "no_contact_name": "No contact name", + "list_of_customers": "This section will contain the list of customers.", + "primary_display_name": "Primary Display Name", + "select_currency": "Select currency", + "select_a_customer": "Select a customer", + "type_or_click": "Type or click to select", + "new_transaction": "New Transaction", + "no_matching_customers": "There are no matching customers!", + "phone_number": "Phone Number", + "create_date": "Create Date", + "confirm_delete": "You will not be able to recover this customer and all the related Invoices, Estimates and Payments. | You will not be able to recover these customers and all the related Invoices, Estimates and Payments.", + "created_message": "Customer created successfully", + "updated_message": "Customer updated successfully", + "deleted_message": "Customer deleted successfully | Customers deleted successfully" + }, + "items": { + "title": "Items", + "items_list": "Items List", + "name": "Name", + "unit": "Unit", + "description": "Description", + "added_on": "Added On", + "price": "Price", + "date_of_creation": "Date Of Creation", + "not_selected": "No item selected", + "action": "Action", + "add_item": "Add Item", + "save_item": "Save Item", + "update_item": "Update Item", + "item": "Item | Items", + "add_new_item": "Add New Item", + "new_item": "New Item", + "edit_item": "Edit Item", + "no_items": "No items yet!", + "list_of_items": "This section will contain the list of items.", + "select_a_unit": "select unit", + "taxes": "Taxes", + "item_attached_message": "Cannot delete an item which is already in use", + "confirm_delete": "You will not be able to recover this Item | You will not be able to recover these Items", + "created_message": "Item created successfully", + "updated_message": "Item updated successfully", + "deleted_message": "Item deleted successfully | Items deleted successfully" + }, + "estimates": { + "title": "Estimates", + "estimate": "Estimate | Estimates", + "estimates_list": "Estimates List", + "days": "{days} Days", + "months": "{months} Month", + "years": "{years} Year", + "all": "All", + "paid": "Paid", + "unpaid": "Unpaid", + "customer": "CUSTOMER", + "ref_no": "REF NO.", + "number": "NUMBER", + "amount_due": "AMOUNT DUE", + "partially_paid": "Partially Paid", + "total": "Total", + "discount": "Discount", + "sub_total": "Sub Total", + "estimate_number": "Estimate Number", + "ref_number": "Ref Number", + "contact": "Contact", + "add_item": "Add an Item", + "date": "Date", + "due_date": "Due Date", + "expiry_date": "Expiry Date", + "status": "Status", + "add_tax": "Add Tax", + "amount": "Amount", + "action": "Action", + "notes": "Notes", + "tax": "Tax", + "estimate_template": "Template", + "convert_to_invoice": "Convert to Invoice", + "mark_as_sent": "Mark as Sent", + "send_estimate": "Send Estimate", + "resend_estimate": "Resend Estimate", + "record_payment": "Record Payment", + "add_estimate": "Add Estimate", + "save_estimate": "Save Estimate", + "confirm_conversion": "This estimate will be used to create a new Invoice.", + "conversion_message": "Invoice created successful", + "confirm_send_estimate": "This estimate will be sent via email to the customer", + "confirm_mark_as_sent": "This estimate will be marked as sent", + "confirm_mark_as_accepted": "This estimate will be marked as Accepted", + "confirm_mark_as_rejected": "This estimate will be marked as Rejected", + "no_matching_estimates": "There are no matching estimates!", + "mark_as_sent_successfully": "Estimate marked as sent successfully", + "send_estimate_successfully": "Estimate sent successfully", + "errors": { + "required": "Field is required" + }, + "accepted": "Accepted", + "rejected": "Rejected", + "sent": "Sent", + "draft": "Draft", + "declined": "Declined", + "new_estimate": "New Estimate", + "add_new_estimate": "Add New Estimate", + "update_Estimate": "Update Estimate", + "edit_estimate": "Edit Estimate", + "items": "items", + "Estimate": "Estimate | Estimates", + "add_new_tax": "Add New Tax", + "no_estimates": "No estimates yet!", + "list_of_estimates": "This section will contain the list of estimates.", + "mark_as_rejected": "Mark as rejected", + "mark_as_accepted": "Mark as accepted", + "marked_as_accepted_message": "Estimate marked as accepted", + "marked_as_rejected_message": "Estimate marked as rejected", + "confirm_delete": "You will not be able to recover this Estimate | You will not be able to recover these Estimates", + "created_message": "Estimate created successfully", + "updated_message": "Estimate updated successfully", + "deleted_message": "Estimate deleted successfully | Estimates deleted successfully", + "something_went_wrong": "something went wrong", + "item": { + "title": "Item Title", + "description": "Description", + "quantity": "Quantity", + "price": "Price", + "discount": "Discount", + "total": "Total", + "total_discount": "Total Discount", + "sub_total": "Sub Total", + "tax": "Tax", + "amount": "Amount", + "select_an_item": "Type or click to select an item", + "type_item_description": "Type Item Description (optional)" + } + }, + "invoices": { + "title": "Invoices", + "invoices_list": "Invoices List", + "days": "{days} Days", + "months": "{months} Month", + "years": "{years} Year", + "all": "All", + "paid": "Paid", + "unpaid": "Unpaid", + "viewed": "Viewed", + "overdue": "Overdue", + "completed": "Completed", + "customer": "CUSTOMER", + "paid_status": "PAID STATUS", + "ref_no": "REF NO.", + "number": "NUMBER", + "amount_due": "AMOUNT DUE", + "partially_paid": "Partially Paid", + "total": "Total", + "discount": "Discount", + "sub_total": "Sub Total", + "invoice": "Invoice | Invoices", + "invoice_number": "Invoice Number", + "ref_number": "Ref Number", + "contact": "Contact", + "add_item": "Add an Item", + "date": "Date", + "due_date": "Due Date", + "status": "Status", + "add_tax": "Add Tax", + "amount": "Amount", + "action": "Action", + "notes": "Notes", + "view": "View", + "send_invoice": "Send Invoice", + "resend_invoice": "Resend Invoice", + "invoice_template": "Invoice Template", + "template": "Template", + "mark_as_sent": "Mark as sent", + "confirm_send_invoice": "This invoice will be sent via email to the customer", + "invoice_mark_as_sent": "This invoice will be marked as sent", + "confirm_send": "This invoice will be sent via email to the customer", + "invoice_date": "Invoice Date", + "record_payment": "Record Payment", + "add_new_invoice": "Add New Invoice", + "update_expense": "Update Expense", + "edit_invoice": "Edit Invoice", + "new_invoice": "New Invoice", + "save_invoice": "Save Invoice", + "update_invoice": "Update Invoice", + "add_new_tax": "Add New Tax", + "no_invoices": "No Invoices yet!", + "list_of_invoices": "This section will contain the list of invoices.", + "select_invoice": "Select Invoice", + "no_matching_invoices": "There are no matching invoices!", + "mark_as_sent_successfully": "Invoice marked as sent successfully", + "invoice_sent_successfully": "Invoice sent successfully", + "cloned_successfully": "Invoice cloned successfully", + "clone_invoice": "Clone Invoice", + "confirm_clone": "This invoice will be cloned into a new Invoice", + "item": { + "title": "Item Title", + "description": "Description", + "quantity": "Quantity", + "price": "Price", + "discount": "Discount", + "total": "Total", + "total_discount": "Total Discount", + "sub_total": "Sub Total", + "tax": "Tax", + "amount": "Amount", + "select_an_item": "Type or click to select an item", + "type_item_description": "Type Item Description (optional)" + }, + "confirm_delete": "You will not be able to recover this Invoice | You will not be able to recover these Invoices", + "created_message": "Invoice created successfully", + "updated_message": "Invoice updated successfully", + "deleted_message": "Invoice deleted successfully | Invoices deleted successfully", + "marked_as_sent_message": "Invoice marked as sent successfully", + "something_went_wrong": "something went wrong", + "invalid_due_amount_message": "Total Invoice amount cannot be less than total paid amount for this Invoice. Please update the invoice or delete the associated payments to continue." + }, + "payments": { + "title": "Payments", + "payments_list": "Payments List", + "record_payment": "Record Payment", + "customer": "Customer", + "date": "Date", + "amount": "Amount", + "action": "Action", + "payment_number": "Payment Number", + "payment_mode": "Payment Mode", + "invoice": "Invoice", + "note": "Note", + "add_payment": "Add Payment", + "new_payment": "New Payment", + "edit_payment": "Edit Payment", + "view_payment": "View Payment", + "add_new_payment": "Add New Payment", + "send_payment_receipt": "Send Payment Receipt", + "send_payment": "Send Payment", + "save_payment": "Save Payment", + "update_payment": "Update Payment", + "payment": "Payment | Payments", + "no_payments": "No payments yet!", + "not_selected": "Not selected", + "no_invoice": "No invoice", + "no_matching_payments": "There are no matching payments!", + "list_of_payments": "This section will contain the list of payments.", + "select_payment_mode": "Select payment mode", + "confirm_mark_as_sent": "This estimate will be marked as sent", + "confirm_send_payment": "This payment will be sent via email to the customer", + "send_payment_successfully": "Payment sent successfully", + "something_went_wrong": "something went wrong", + "confirm_delete": "You will not be able to recover this Payment | You will not be able to recover these Payments", + "created_message": "Payment created successfully", + "updated_message": "Payment updated successfully", + "deleted_message": "Payment deleted successfully | Payments deleted successfully", + "invalid_amount_message": "Payment amount is invalid" + }, + "expenses": { + "title": "Expenses", + "expenses_list": "Expenses List", + "select_a_customer": "Select a customer", + "expense_title": "Title", + "customer": "Customer", + "contact": "Contact", + "category": "Category", + "from_date": "From Date", + "to_date": "To Date", + "expense_date": "Date", + "description": "Description", + "receipt": "Receipt", + "amount": "Amount", + "action": "Action", + "not_selected": "Not selected", + "note": "Note", + "category_id": "Category Id", + "date": "Date", + "add_expense": "Add Expense", + "add_new_expense": "Add New Expense", + "save_expense": "Save Expense", + "update_expense": "Update Expense", + "download_receipt": "Download Receipt", + "edit_expense": "Edit Expense", + "new_expense": "New Expense", + "expense": "Expense | Expenses", + "no_expenses": "No expenses yet!", + "list_of_expenses": "This section will contain the list of expenses.", + "confirm_delete": "You will not be able to recover this Expense | You will not be able to recover these Expenses", + "created_message": "Expense created successfully", + "updated_message": "Expense updated successfully", + "deleted_message": "Expense deleted successfully | Expenses deleted successfully", + "categories": { + "categories_list": "Categories List", + "title": "Title", + "name": "Name", + "description": "Description", + "amount": "Amount", + "actions": "Actions", + "add_category": "Add Category", + "new_category": "New Category", + "category": "Category | Categories", + "select_a_category": "Select a category" + } + }, + "login": { + "email": "Email", + "password": "Password", + "forgot_password": "Forgot Password?", + "or_signIn_with": "or Sign in with", + "login": "Login", + "register": "Register", + "reset_password": "Reset Password", + "password_reset_successfully": "Password Reset Successfully", + "enter_email": "Enter email", + "enter_password": "Enter Password", + "retype_password": "Retype Password" + }, + "users": { + "title": "Users", + "users_list": "Users List", + "name": "Name", + "description": "Description", + "added_on": "Added On", + "date_of_creation": "Date Of Creation", + "action": "Action", + "add_user": "Add User", + "save_user": "Save User", + "update_user": "Update User", + "user": "User | Users", + "add_new_user": "Add New User", + "new_user": "New User", + "edit_user": "Edit User", + "no_users": "No users yet!", + "list_of_users": "This section will contain the list of users.", + "email": "Email", + "phone": "Phone", + "password": "Password", + "user_attached_message": "Cannot delete an item which is already in use", + "confirm_delete": "You will not be able to recover this User | You will not be able to recover these Users", + "created_message": "User created successfully", + "updated_message": "User updated successfully", + "deleted_message": "User deleted successfully | User deleted successfully" + }, + "reports": { + "title": "Report", + "from_date": "From Date", + "to_date": "To Date", + "status": "Status", + "paid": "Paid", + "unpaid": "Unpaid", + "download_pdf": "Download PDF", + "view_pdf": "View PDF", + "update_report": "Update Report", + "report": "Report | Reports", + "profit_loss": { + "profit_loss": "Profit & Loss", + "to_date": "To Date", + "from_date": "From Date", + "date_range": "Select Date Range" + }, + "sales": { + "sales": "Sales", + "date_range": "Select Date Range", + "to_date": "To Date", + "from_date": "From Date", + "report_type": "Report Type" + }, + "taxes": { + "taxes": "Taxes", + "to_date": "To Date", + "from_date": "From Date", + "date_range": "Select Date Range" + }, + "errors": { + "required": "Field is required" + }, + "invoices": { + "invoice": "Invoice", + "invoice_date": "Invoice Date", + "due_date": "Due Date", + "amount": "Amount", + "contact_name": "Contact Name", + "status": "Status" + }, + "estimates": { + "estimate": "Estimate", + "estimate_date": "Estimate Date", + "due_date": "Due Date", + "estimate_number": "Estimate Number", + "ref_number": "Ref Number", + "amount": "Amount", + "contact_name": "Contact Name", + "status": "Status" + }, + "expenses": { + "expenses": "Expenses", + "category": "Category", + "date": "Date", + "amount": "Amount", + "to_date": "To Date", + "from_date": "From Date", + "date_range": "Select Date Range" + } + }, + "settings": { + "menu_title": { + "account_settings": "Account Settings", + "company_information": "Company Information", + "customization": "Customization", + "preferences": "Preferences", + "notifications": "Notifications", + "tax_types": "Tax Types", + "expense_category": "Expense Categories", + "update_app": "Update App", + "backup": "Backup", + "file_disk": "File Disk", + "custom_fields": "Custom Fields", + "payment_modes": "Payment Modes", + "notes": "Notes" + }, + "title": "Settings", + "setting": "Settings | Settings", + "general": "General", + "language": "Language", + "primary_currency": "Primary Currency", + "timezone": "Time Zone", + "date_format": "Date Format", + "currencies": { + "title": "Currencies", + "currency": "Currency | Currencies", + "currencies_list": "Currencies List", + "select_currency": "Select Currency", + "name": "Name", + "code": "Code", + "symbol": "Symbol", + "precision": "Precision", + "thousand_separator": "Thousand Separator", + "decimal_separator": "Decimal Separator", + "position": "Position", + "position_of_symbol": "Position Of Symbol", + "right": "Right", + "left": "Left", + "action": "Action", + "add_currency": "Add Currency" + }, + "mail": { + "host": "Mail Host", + "port": "Mail Port", + "driver": "Mail Driver", + "secret": "Secret", + "mailgun_secret": "Mailgun Secret", + "mailgun_domain": "Domain", + "mailgun_endpoint": "Mailgun Endpoint", + "ses_secret": "SES Secret", + "ses_key": "SES Key", + "password": "Mail Password", + "username": "Mail Username", + "mail_config": "Mail Configuration", + "from_name": "From Mail Name", + "from_mail": "From Mail Address", + "encryption": "Mail Encryption", + "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc." + }, + "pdf": { + "title": "PDF Setting", + "footer_text": "Footer Text", + "pdf_layout": "PDF Layout" + }, + "company_info": { + "company_info": "Company info", + "company_name": "Company Name", + "company_logo": "Company Logo", + "section_description": "Information about your company that will be displayed on invoices, estimates and other documents created by Crater.", + "phone": "Phone", + "country": "Country", + "state": "State", + "city": "City", + "address": "Address", + "zip": "Zip", + "save": "Save", + "updated_message": "Company information updated successfully" + }, + "custom_fields": { + "title": "Custom Fields", + "section_description": "Customize your Invoices, Estimates & Payment Receipts with your own fields. Make sure to use the below added fields on the address formats on Customization settings page.", + "add_custom_field": "Add Custom Field", + "edit_custom_field": "Edit Custom Field", + "field_name": "Field Name", + "label": "Label", + "type": "Type", + "name": "Name", + "required": "Required", + "placeholder": "Placeholder", + "help_text": "Help Text", + "default_value": "Default Value", + "prefix": "Prefix", + "starting_number": "Starting Number", + "model": "Model", + "help_text_description": "Enter some text to help users understand the purpose of this custom field.", + "suffix": "Suffix", + "yes": "Yes", + "no": "No", + "order": "Order", + "custom_field_confirm_delete": "You will not be able to recover this Custom Field", + "already_in_use": "Custom Field is already in use", + "deleted_message": "Custom Field deleted successfully", + "options": "options", + "add_option": "Add Options", + "add_another_option": "Add another option", + "sort_in_alphabetical_order": "Sort in Alphabetical Order", + "add_options_in_bulk": "Add options in bulk", + "use_predefined_options": "Use Predefined Options", + "select_custom_date": "Select Custom Date", + "select_relative_date": "Select Relative Date", + "ticked_by_default": "Ticked by default", + "updated_message": "Custom Field updated successfully", + "added_message": "Custom Field added successfully" + }, + "customization": { + "customization": "customization", + "save": "Save", + "addresses": { + "title": "Addresses", + "section_description": "You can set Customer Billing Address and Customer Shipping Address Format (Displayed in PDF only). ", + "customer_billing_address": "Customer Billing Address", + "customer_shipping_address": "Customer Shipping Address", + "company_address": "Company Address", + "insert_fields": "Insert Fields", + "contact": "Contact", + "address": "Address", + "display_name": "Display Name", + "primary_contact_name": "Primary Contact Name", + "email": "Email", + "website": "Website", + "name": "Name", + "country": "Country", + "state": "State", + "city": "City", + "company_name": "Company Name", + "address_street_1": "Address Street 1", + "address_street_2": "Address Street 2", + "phone": "Phone", + "zip_code": "Zip Code", + "address_setting_updated": "Address Setting updated successfully" + }, + "updated_message": "Company information updated successfully", + "invoices": { + "title": "Invoices", + "notes": "Notes", + "invoice_prefix": "Invoice Prefix", + "default_invoice_email_body": "Default Invoice Email Body", + "invoice_settings": "Invoice Settings", + "autogenerate_invoice_number": "Auto-generate Invoice Number", + "autogenerate_invoice_number_desc": "Disable this, If you don't wish to auto-generate invoice numbers each time you create a new invoice.", + "enter_invoice_prefix": "Enter invoice prefix", + "terms_and_conditions": "Terms and Conditions", + "company_address_format": "Company Address Format", + "shipping_address_format": "Shipping Address Format", + "billing_address_format": "Billing Address Format", + "invoice_settings_updated": "Invoice Setting updated successfully" + }, + "estimates": { + "title": "Estimates", + "estimate_prefix": "Estimate Prefix", + "default_estimate_email_body": "Default Estimate Email Body", + "estimate_settings": "Estimate Settings", + "autogenerate_estimate_number": "Auto-generate Estimate Number", + "estimate_setting_description": "Disable this, If you don't wish to auto-generate estimate numbers each time you create a new estimate.", + "enter_estimate_prefix": "Enter estmiate prefix", + "estimate_setting_updated": "Estimate Setting updated successfully", + "company_address_format": "Company Address Format", + "billing_address_format": "Billing Address Format", + "shipping_address_format": "Shipping Address Format" + }, + "payments": { + "title": "Payments", + "description": "Modes of transaction for payments", + "payment_prefix": "Payment Prefix", + "default_payment_email_body": "Default Payment Email Body", + "payment_settings": "Payment Settings", + "autogenerate_payment_number": "Auto-generate Payment Number", + "payment_setting_description": "Disable this, If you don't wish to auto-generate payment numbers each time you create a new payment.", + "enter_payment_prefix": "Enter Payment Prefix", + "payment_setting_updated": "Payment Setting updated successfully", + "payment_modes": "Payment Modes", + "add_payment_mode": "Add Payment Mode", + "edit_payment_mode": "Edit Payment Mode", + "mode_name": "Mode Name", + "payment_mode_added": "Payment Mode Added", + "payment_mode_updated": "Payment Mode Updated", + "payment_mode_confirm_delete": "You will not be able to recover this Payment Mode", + "already_in_use": "Payment Mode is already in use", + "deleted_message": "Payment Mode deleted successfully", + "company_address_format": "Company Address Format", + "from_customer_address_format": "From Customer Address Format" + }, + "items": { + "title": "Items", + "units": "Units", + "add_item_unit": "Add Item Unit", + "edit_item_unit": "Edit Item Unit", + "unit_name": "Unit Name", + "item_unit_added": "Item Unit Added", + "item_unit_updated": "Item Unit Updated", + "item_unit_confirm_delete": "You will not be able to recover this Item unit", + "already_in_use": "Item Unit is already in use", + "deleted_message": "Item Unit deleted successfully" + }, + "notes": { + "title": "Notes", + "description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", + "notes": "Notes", + "type": "Type", + "add_note": "Add Note", + "add_new_note": "Add New Note", + "name": "Name", + "edit_note": "Edit Note", + "note_added": "Note added successfully", + "note_updated": "Note Updated successfully", + "note_confirm_delete": "You will not be able to recover this Note", + "already_in_use": "Note is already in use", + "deleted_message": "Note deleted successfully" + } + }, + "account_settings": { + "profile_picture": "Profile Picture", + "name": "Name", + "email": "Email", + "password": "Password", + "confirm_password": "Confirm Password", + "account_settings": "Account Settings", + "save": "Save", + "section_description": "You can update your name, email & password using the form below.", + "updated_message": "Account Settings updated successfully" + }, + "user_profile": { + "name": "Name", + "email": "Email", + "password": "Password", + "confirm_password": "Confirm Password" + }, + "notification": { + "title": "Notification", + "email": "Send Notifications to", + "description": "Which email notifications would you like to receive when something changes?", + "invoice_viewed": "Invoice viewed", + "invoice_viewed_desc": "When your customer views the invoice sent via crater dashboard.", + "estimate_viewed": "Estimate viewed", + "estimate_viewed_desc": "When your customer views the estimate sent via crater dashboard.", + "save": "Save", + "email_save_message": "Email saved successfully", + "please_enter_email": "Please Enter Email" + }, + "tax_types": { + "title": "Tax Types", + "add_tax": "Add Tax", + "edit_tax": "Edit Tax", + "description": "You can add or Remove Taxes as you please. Crater supports Taxes on Individual Items as well as on the invoice.", + "add_new_tax": "Add New Tax", + "tax_settings": "Tax Settings", + "tax_per_item": "Tax Per Item", + "tax_name": "Tax Name", + "compound_tax": "Compound Tax", + "percent": "Percent", + "action": "Action", + "tax_setting_description": "Enable this if you want to add taxes to individual invoice items. By default, taxes are added directly to the invoice.", + "created_message": "Tax type created successfully", + "updated_message": "Tax type updated successfully", + "deleted_message": "Tax type deleted successfully", + "confirm_delete": "You will not be able to recover this Tax Type", + "already_in_use": "Tax is already in use" + }, + "expense_category": { + "title": "Expense Categories", + "action": "Action", + "description": "Categories are required for adding expense entries. You can Add or Remove these categories according to your preference.", + "add_new_category": "Add New Category", + "add_category": "Add Category", + "edit_category": "Edit Category", + "category_name": "Category Name", + "category_description": "Description", + "created_message": "Expense Category created successfully", + "deleted_message": "Expense category deleted successfully", + "updated_message": "Expense category updated successfully", + "confirm_delete": "You will not be able to recover this Expense Category", + "already_in_use": "Category is already in use" + }, + "preferences": { + "currency": "Currency", + "default_language": "Default Language", + "time_zone": "Time Zone", + "fiscal_year": "Financial Year", + "date_format": "Date Format", + "discount_setting": "Discount Setting", + "discount_per_item": "Discount Per Item ", + "discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.", + "save": "Save", + "preference": "Preference | Preferences", + "general_settings": "Default preferences for the system.", + "updated_message": "Preferences updated successfully", + "select_language": "Select Language", + "select_time_zone": "Select Time Zone", + "select_date_format": "Select Date Format", + "select_financial_year": "Select Financial Year" + }, + "update_app": { + "title": "Update App", + "description": "You can easily update Crater by checking for a new update by clicking the button below", + "check_update": "Check for updates", + "avail_update": "New Update available", + "next_version": "Next version", + "requirements": "Requirements", + "update": "Update Now", + "update_progress": "Update in progress...", + "progress_text": "It will just take a few minutes. Please do not refresh the screen or close the window before the update finishes", + "update_success": "App has been updated! Please wait while your browser window gets reloaded automatically.", + "latest_message": "No update available! You are on the latest version.", + "current_version": "Current Version", + "download_zip_file": "Download ZIP file", + "unzipping_package": "Unzipping Package", + "copying_files": "Copying Files", + "running_migrations": "Running Migrations", + "finishing_update": "Finishing Update", + "update_failed": "Update Failed", + "update_failed_text": "Sorry! Your update failed on : {step} step" + }, + "backup": { + "title": "Backup | Backups", + "description": "The backup is a zipfile that contains all files in the directories you specify along with a dump of your database", + "new_backup": "Add New Backup", + "create_backup": "Create Backup", + "select_backup_type": "Select Backup Type", + "backup_confirm_delete": "You will not be able to recover this Backup", + "path": "path", + "new_disk": "New Disk", + "created_at": "created at", + "size": "size", + "dropbox": "dropbox", + "local": "local", + "healthy": "healthy", + "amount_of_backups": "amount of backups", + "newest_backups": "newest backups", + "used_storage": "used storage", + "select_disk": "Select Disk", + "action": "Action", + "deleted_message": "Backup deleted successfully", + "created_message": "Backup created successfully", + "invalid_disk_credentials": "Invalid credential of selected disk" + }, + "disk": { + "title": "File Disk | File Disks", + "description": "By default, Crater will use your local disk for saving backups, avatar and other image files. You can configure more than one disk drivers like DigitalOcean, S3 and Dropbox according to your preference.", + "created_at": "created at", + "dropbox": "dropbox", + "name": "Name", + "driver": "Driver", + "disk_type": "Type", + "disk_name": "Disk Name", + "new_disk": "Add New Disk", + "filesystem_driver": "Filesystem Driver", + "local_driver": "local Driver", + "local_root": "local Root", + "public_driver": "Public Driver", + "public_root": "Public Root", + "public_url": "Public URL", + "public_visibility": "Public Visibility", + "media_driver": "Media Driver", + "media_root": "Media Root", + "aws_driver": "AWS Driver", + "aws_key": "AWS Key", + "aws_secret": "AWS Secret", + "aws_region": "AWS Region", + "aws_bucket": "AWS Bucket", + "aws_root": "AWS Root", + "do_spaces_type": "Do Spaces type", + "do_spaces_key": "Do Spaces key", + "do_spaces_secret": "Do Spaces Secret", + "do_spaces_region": "Do Spaces Region", + "do_spaces_bucket": "Do Spaces Bucket", + "do_spaces_endpoint": "Do Spaces Endpoint", + "do_spaces_root": "Do Spaces Root", + "dropbox_type": "Dropbox Type", + "dropbox_token": "Dropbox Token", + "dropbox_key": "Dropbox Key", + "dropbox_secret": "Dropbox Secret", + "dropbox_app": "Dropbox App", + "dropbox_root": "Dropbox Root", + "default_driver": "Default Driver", + "is_default": "IS DEFAULT", + "set_default_disk": "Set Default Disk", + "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk", + "success_set_default_disk": "Disk set as default successfully", + "save_pdf_to_disk": "Save PDFs to Disk", + "disk_setting_description": " Enable this, if you wish to save a copy of each Invoice, Estimate & Payment Receipt PDF on your default disk automatically. Turning this option will decrease the load-time when viewing the PDFs.", + "select_disk": "Select Disk", + "disk_settings": "Disk Settings", + "confirm_delete": "Your existing files & folders in the specified disk will not be affected but your disk configuration will be deleted from Crater", + "action": "Action", + "edit_file_disk": "Edit File Disk", + "success_create": "Disk added successfully", + "success_update": "Disk updated successfully", + "error": "Disk addition failed", + "deleted_message": "File Disk deleted successfully", + "disk_variables_save_successfully": "Disk Configured Successfully", + "disk_variables_save_error": "Disk configuration failed.", + "invalid_disk_credentials": "Invalid credential of selected disk" + } + }, + "wizard": { + "account_info": "Account Information", + "account_info_desc": "Below details will be used to create the main Administrator account. Also you can change the details anytime after logging in.", + "name": "Name", + "email": "Email", + "password": "Password", + "confirm_password": "Confirm Password", + "save_cont": "Save & Continue", + "company_info": "Company Information", + "company_info_desc": "This information will be displayed on invoices. Note that you can edit this later on settings page.", + "company_name": "Company Name", + "company_logo": "Company Logo", + "logo_preview": "Logo Preview", + "preferences": "Preferences", + "preferences_desc": "Default preferences for the system.", + "country": "Country", + "state": "State", + "city": "City", + "address": "Address", + "street": "Street1 | Street2", + "phone": "Phone", + "zip_code": "Zip Code", + "go_back": "Go Back", + "currency": "Currency", + "language": "Language", + "time_zone": "Time Zone", + "fiscal_year": "Financial Year", + "date_format": "Date Format", + "from_address": "From Address", + "username": "Username", + "next": "Next", + "continue": "Continue", + "skip": "Skip", + "database": { + "database": "Site URL & Database", + "connection": "Database Connection", + "host": "Database Host", + "port": "Database Port", + "password": "Database Password", + "app_url": "App URL", + "app_domain": "App Domain", + "username": "Database Username", + "db_name": "Database Name", + "db_path": "Database Path", + "desc": "Create a database on your server and set the credentials using the form below." + }, + "permissions": { + "permissions": "Permissions", + "permission_confirm_title": "Are you sure you want to continue?", + "permission_confirm_desc": "Folder permission check failed", + "permission_desc": "Below is the list of folder permissions which are required in order for the app to work. If the permission check fails, make sure to update your folder permissions." + }, + "mail": { + "host": "Mail Host", + "port": "Mail Port", + "driver": "Mail Driver", + "secret": "Secret", + "mailgun_secret": "Mailgun Secret", + "mailgun_domain": "Domain", + "mailgun_endpoint": "Mailgun Endpoint", + "ses_secret": "SES Secret", + "ses_key": "SES Key", + "password": "Mail Password", + "username": "Mail Username", + "mail_config": "Mail Configuration", + "from_name": "From Mail Name", + "from_mail": "From Mail Address", + "encryption": "Mail Encryption", + "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc." + }, + "req": { + "system_req": "System Requirements", + "php_req_version": "Php (version {version} required)", + "check_req": "Check Requirements", + "system_req_desc": "Crater has a few server requirements. Make sure that your server has the required php version and all the extensions mentioned below." + }, + "errors": { + "migrate_failed": "Migrate Failed", + "database_variables_save_error": "Cannot write configuration to .env file. Please check its file permissions", + "mail_variables_save_error": "Email configuration failed.", + "connection_failed": "Database connection failed", + "database_should_be_empty": "Database should be empty" + }, + "success": { + "mail_variables_save_successfully": "Email configured successfully", + "database_variables_save_successfully": "Database configured successfully." + } + }, + "validation": { + "invalid_phone": "Invalid Phone Number", + "invalid_url": "Invalid url (ex: http://www.craterapp.com)", + "invalid_domain_url": "Invalid url (ex: craterapp.com)", + "required": "Field is required", + "email_incorrect": "Incorrect Email.", + "email_already_taken": "The email has already been taken.", + "email_does_not_exist": "User with given email doesn't exist", + "item_unit_already_taken": "This item unit name has already been taken", + "payment_mode_already_taken": "This payment mode name has already been taken", + "send_reset_link": "Send Reset Link", + "not_yet": "Not yet? Send it again", + "password_min_length": "Password must contain {count} characters", + "name_min_length": "Name must have at least {count} letters.", + "enter_valid_tax_rate": "Enter valid tax rate", + "numbers_only": "Numbers Only.", + "characters_only": "Characters Only.", + "password_incorrect": "Passwords must be identical", + "password_length": "Password must be {count} character long.", + "qty_must_greater_than_zero": "Quantity must be greater than zero.", + "price_greater_than_zero": "Price must be greater than zero.", + "payment_greater_than_zero": "Payment must be greater than zero.", + "payment_greater_than_due_amount": "Entered Payment is more than due amount of this invoice.", + "quantity_maxlength": "Quantity should not be greater than 20 digits.", + "price_maxlength": "Price should not be greater than 20 digits.", + "price_minvalue": "Price should be greater than 0.", + "amount_maxlength": "Amount should not be greater than 20 digits.", + "amount_minvalue": "Amount should be greater than 0.", + "description_maxlength": "Description should not be greater than 255 characters.", + "subject_maxlength": "Subject should not be greater than 100 characters.", + "message_maxlength": "Message should not be greater than 255 characters.", + "maximum_options_error": "Maximum of {max} options selected. First remove a selected option to select another.", + "notes_maxlength": "Notes should not be greater than 255 characters.", + "address_maxlength": "Address should not be greater than 255 characters.", + "ref_number_maxlength": "Ref Number should not be greater than 255 characters.", + "prefix_maxlength": "Prefix should not be greater than 5 characters.", + "something_went_wrong": "something went wrong" + }, + "pdf_estimate_label": "Estimate", + "pdf_estimate_number": "Estimate Number", + "pdf_estimate_date": "Estimate Date", + "pdf_estimate_expire_date": "Expiry date", + "pdf_invoice_label": "Invoice", + "pdf_invoice_number": "Invoice Number", + "pdf_invoice_date": "Invoice Date", + "pdf_invoice_due_date": "Due date", + "pdf_notes": "Notes", + "pdf_items_label": "Items", + "pdf_quantity_label": "Quantity", + "pdf_price_label": "Price", + "pdf_discount_label": "Discount", + "pdf_amount_label": "Amount", + "pdf_subtotal": "Subtotal", + "pdf_total": "Total", + "pdf_payment_label": "Payment", + "pdf_payment_receipt_label": "PAYMENT RECEIPT", + "pdf_payment_date": "Payment Date", + "pdf_payment_number": "Payment Number", + "pdf_payment_mode": "Payment Mode", + "pdf_payment_amount_received_label": "Amount Received", + "pdf_expense_report_label": "EXPENSES REPORT", + "pdf_total_expenses_label": "TOTAL EXPENSE", + "pdf_profit_loss_label": "PROFIT & LOSS REPORT", + "pdf_sales_customers_label": "Sales Customer Report", + "pdf_sales_items_label": "Sales Item Report", + "pdf_tax_summery_label": "Tax Summary Report", + "pdf_income_label": "INCOME", + "pdf_net_profit_label": "NET PROFIT", + "pdf_customer_sales_report": "Sales Report: By Customer", + "pdf_total_sales_label": "TOTAL SALES", + "pdf_item_sales_label": "Sales Report: By Item", + "pdf_tax_report_label": "TAX REPORT", + "pdf_total_tax_label": "TOTAL TAX", + "pdf_tax_types_label": "Tax Types", + "pdf_expenses_label": "Expenses", + "pdf_bill_to": "Bill to,", + "pdf_ship_to": "Ship to,", + "pdf_received_from": "Received from:", + "pdf_tax_label": "Tax" +} diff --git a/resources/scripts/locales/it.json b/resources/scripts/locales/it.json new file mode 100644 index 000000000..cc7fd3edd --- /dev/null +++ b/resources/scripts/locales/it.json @@ -0,0 +1,1146 @@ +{ + "navigation": { + "dashboard": "Dashboard", + "customers": "Clienti", + "items": "Commesse", + "invoices": "Fatture", + "expenses": "Spese", + "estimates": "Preventivi", + "payments": "Pagamenti", + "reports": "Reports", + "settings": "Configurazione", + "logout": "Logout", + "users": "Users" + }, + "general": { + "add_company": "Add Company", + "view_pdf": "Vedi PDF", + "copy_pdf_url": "Copy PDF Url", + "download_pdf": "Scarica PDF", + "save": "Salva", + "create": "Create", + "cancel": "Elimina", + "update": "Aggiorna", + "deselect": "Deseleziona", + "download": "Download", + "from_date": "Dalla Data", + "to_date": "Alla Data", + "from": "Da", + "to": "A", + "sort_by": "Ordina per", + "ascending": "Crescente", + "descending": "Decrescente", + "subject": "Oggetto", + "body": "Corpo", + "message": "Messaggio", + "send": "Send", + "go_back": "Torna indietro", + "back_to_login": "Torna al Login?", + "home": "Home", + "filter": "Filtro", + "delete": "Elimina", + "edit": "Modifica", + "view": "Visualizza", + "add_new_item": "Aggiungi nuova Commessa", + "clear_all": "Pulisci tutto", + "showing": "Showing", + "of": "di", + "actions": "Azioni", + "subtotal": "SUBTOTALE", + "discount": "SCONTO", + "fixed": "Fissato", + "percentage": "Percentuale", + "tax": "TASSA", + "total_amount": "AMMONTARE TOTALE", + "bill_to": "Fattura a", + "ship_to": "Invia a", + "due": "Dovuto", + "draft": "Bozza", + "sent": "Inviata", + "all": "Tutte", + "select_all": "Seleziona tutto", + "choose_file": "Clicca per selezionare un file", + "choose_template": "Scegli un modello", + "choose": "Scegli", + "remove": "Rimuovi", + "powered_by": "Prodotto da", + "bytefury": "Bytefury", + "select_a_status": "Seleziona uno Stato", + "select_a_tax": "Seleziona una Tassa", + "search": "Cerca", + "are_you_sure": "Sei sicuro/a?", + "list_is_empty": "La lista è vuota.", + "no_tax_found": "Nessuna Tassa trovata!", + "four_zero_four": "404", + "you_got_lost": "Hoops! Ti sei perso", + "go_home": "Vai alla Home", + "test_mail_conf": "Configurazione della mail di test", + "send_mail_successfully": "Mail inviata con successo", + "setting_updated": "Configurazioni aggiornate con successo", + "select_state": "Seleziona lo Stato", + "select_country": "Seleziona Paese", + "select_city": "Seleziona Città", + "street_1": "Indirizzo 1", + "street_2": "Indirizzo 2", + "action_failed": "Errore", + "retry": "Retry", + "choose_note": "Choose Note", + "no_note_found": "No Note Found", + "insert_note": "Insert Note" + }, + "dashboard": { + "select_year": "Seleziona anno", + "cards": { + "due_amount": "Somma dovuta", + "customers": "Clienti", + "invoices": "Fatture", + "estimates": "Preventivi" + }, + "chart_info": { + "total_sales": "Vendite", + "total_receipts": "Ricevute", + "total_expense": "Uscite", + "net_income": "Guadagno netto", + "year": "Seleziona anno" + }, + "monthly_chart": { + "title": "Entrate & Uscite" + }, + "recent_invoices_card": { + "title": "Fatture insolute", + "due_on": "Data di scadenza", + "customer": "Cliente", + "amount_due": "Ammontare dovuto", + "actions": "Azioni", + "view_all": "Vedi tutto" + }, + "recent_estimate_card": { + "title": "Preventivi recenti", + "date": "Data", + "customer": "Cliente", + "amount_due": "Ammontare dovuto", + "actions": "Azioni", + "view_all": "Vedi tutto" + } + }, + "tax_types": { + "name": "Nome", + "description": "Descrizione", + "percent": "Percento", + "compound_tax": "Tassa composta" + }, + "global_search": { + "search": "Search...", + "customers": "Clienti", + "users": "Users", + "no_results_found": "No Results Found" + }, + "customers": { + "title": "Clienti", + "add_customer": "Aggiungi cliente", + "contacts_list": "Lista clienti", + "name": "Nome", + "mail": "Mail | Mails", + "statement": "Statement", + "display_name": "Mostra nome", + "primary_contact_name": "Riferimento", + "contact_name": "Nome Contatto", + "amount_due": "Ammontare dovuto", + "email": "Email", + "address": "Indirizzo", + "phone": "Telefono", + "website": "Sito web", + "overview": "Overview", + "enable_portal": "Enable Portal", + "country": "Paese", + "state": "Stato", + "city": "Città", + "zip_code": "Codice Postale", + "added_on": "Aggiunto il", + "action": "Azione", + "password": "Password", + "street_number": "Numero Civico", + "primary_currency": "Valùta Principale", + "description": "Descrizione", + "add_new_customer": "Aggiungi nuovo Cliente", + "save_customer": "Salva Cliente", + "update_customer": "Aggiorna Cliente", + "customer": "Cliente | Clienti", + "new_customer": "Nuovo cliente", + "edit_customer": "Modifica Cliente", + "basic_info": "Informazioni", + "billing_address": "Indirizzo di Fatturazione", + "shipping_address": "Indirizzo di Spedizione", + "copy_billing_address": "Copia da Fatturazione", + "no_customers": "Ancora nessun Cliente!", + "no_customers_found": "Nessun cliente trovato!", + "no_contact": "No contact", + "no_contact_name": "No contact name", + "list_of_customers": "Qui ci sarà la lista dei tuoi clienti", + "primary_display_name": "Mostra il Nome Principale", + "select_currency": "Selezione Valùta", + "select_a_customer": "Seleziona Cliente", + "type_or_click": "Scrivi o clicca per selezionare", + "new_transaction": "Nuova transazione", + "no_matching_customers": "Non ci sono clienti corrispondenti!", + "phone_number": "Numero di telefono", + "create_date": "Crea data", + "confirm_delete": "Non sarai in grado di recuperare questo cliente e tutte le relative fatture, stime e pagamenti. | Non sarai in grado di recuperare questi clienti e tutte le relative fatture, stime e pagamenti.", + "created_message": "Cliente creato con successo", + "updated_message": "Cliente aggiornato con successo", + "deleted_message": "Cliente cancellato con successo | Clienti cancellati con successo" + }, + "items": { + "title": "Commesse", + "items_list": "Lista Commesse", + "name": "Nome", + "unit": "Unità/Tipo", + "description": "Descrizione", + "added_on": "Aggiunto il", + "price": "Prezzo", + "date_of_creation": "Data di creazione", + "not_selected": "No item selected", + "action": "Azione", + "add_item": "Aggiungi Commessa", + "save_item": "Salva", + "update_item": "Aggiorna", + "item": "Commessa | Commesse", + "add_new_item": "Aggiungi nuova Commessa", + "new_item": "Nuova Commessa", + "edit_item": "Modifica Commessa", + "no_items": "Ancora nessuna commessa!", + "list_of_items": "Qui ci sarà la lista delle commesse.", + "select_a_unit": "Seleziona", + "taxes": "Imposte", + "item_attached_message": "Non puoi eliminare una Commessa che è già attiva", + "confirm_delete": "Non potrai ripristinare la Commessa | Non potrai ripristinare le Commesse", + "created_message": "Commessa creata con successo", + "updated_message": "Commessa aggiornata con successo", + "deleted_message": "Commessa eliminata con successo | Commesse eliminate con successo" + }, + "estimates": { + "title": "Preventivi", + "estimate": "Preventivo | Preventivi", + "estimates_list": "Lista Preventivi", + "days": "{days} Giorni", + "months": "{months} Mese", + "years": "{years} Anno", + "all": "Tutti", + "paid": "Pagato", + "unpaid": "Non pagato", + "customer": "CLIENTE", + "ref_no": "RIF N.", + "number": "NUMERO", + "amount_due": "AMMONTARE DOVUTO", + "partially_paid": "Pagamento Parziale", + "total": "Totale", + "discount": "Sconto", + "sub_total": "Sub Totale", + "estimate_number": "Preventivo Numero", + "ref_number": "Numero di Rif.", + "contact": "Contatto", + "add_item": "Aggiungi un item", + "date": "Data", + "due_date": "Data di pagamento", + "expiry_date": "Data di scadenza", + "status": "Stato", + "add_tax": "Aggiungi Imposta", + "amount": "Ammontare", + "action": "Azione", + "notes": "Note", + "tax": "Imposta", + "estimate_template": "Modello", + "convert_to_invoice": "Converti in Fattura", + "mark_as_sent": "Segna come Inviata", + "send_estimate": "Invia preventivo", + "resend_estimate": "Resend Estimate", + "record_payment": "Registra Pagamento", + "add_estimate": "Aggiungi Preventivo", + "save_estimate": "Salva Preventivo", + "confirm_conversion": "Questo preventivo verrà usato per generare una nuova fattura.", + "conversion_message": "Fattura creata", + "confirm_send_estimate": "Questo preventivo verrà inviato al cliente via mail", + "confirm_mark_as_sent": "Questo preventivo verrà contrassegnato come inviato", + "confirm_mark_as_accepted": "Questo preventivo verrà contrassegnato come Accettato", + "confirm_mark_as_rejected": "Questo preventivo verrà contrassegnato come Rifiutato", + "no_matching_estimates": "Nessun preventivo trovato!", + "mark_as_sent_successfully": "Preventivo contrassegnato come inviato con successo", + "send_estimate_successfully": "Preventivo inviato con successo", + "errors": { + "required": "Campo obbligatorio" + }, + "accepted": "Accettato", + "rejected": "Rejected", + "sent": "Inviato", + "draft": "Bozza", + "declined": "Rifiutato", + "new_estimate": "Nuovo Preventivo", + "add_new_estimate": "Crea Nuovo Preventivo", + "update_Estimate": "Aggiorna preventivo", + "edit_estimate": "Modifica Preventivo", + "items": "Commesse", + "Estimate": "Preventivo | Preventivi", + "add_new_tax": "Aggiungi una nuova tassa/imposta", + "no_estimates": "Ancora nessun preventivo!", + "list_of_estimates": "Questa sezione conterrà la lista dei preventivi.", + "mark_as_rejected": "Segna come Rifiutato", + "mark_as_accepted": "Segna come Accettato", + "marked_as_accepted_message": "Preventivo contrassegnato come accettato", + "marked_as_rejected_message": "Preventivo contrassegnato come rifiutato", + "confirm_delete": "Non potrai più recuperare questo preventivo | Non potrai più recuperare questi preventivi", + "created_message": "Preventivo creato con successo", + "updated_message": "Preventivo modificato con successo", + "deleted_message": "Preventivo eliminato con successo | Preventivi eliminati con successo", + "something_went_wrong": "Si è verificato un errore", + "item": { + "title": "Titolo Commessa", + "description": "Descrizione", + "quantity": "Quantità", + "price": "Prezzo", + "discount": "Sconto", + "total": "Totale", + "total_discount": "Sconto Totale", + "sub_total": "Sub Totale", + "tax": "Tasse", + "amount": "Ammontare", + "select_an_item": "Scrivi o clicca per selezionare un item", + "type_item_description": "Scrivi una Descrizione (opzionale)" + } + }, + "invoices": { + "title": "Fatture", + "invoices_list": "Lista Fatture", + "days": "{days} Giorni", + "months": "{months} Mese", + "years": "{years} Anno", + "all": "Tutti", + "paid": "Pagato", + "unpaid": "Insoluto", + "viewed": "Viewed", + "overdue": "Overdue", + "completed": "Completed", + "customer": "CLIENTE", + "paid_status": "STATO DI PAGAMENTO", + "ref_no": "RIF N.", + "number": "NUMERO", + "amount_due": "AMMONTARE DOVUTO", + "partially_paid": "Parzialmente Pagata", + "total": "Totale", + "discount": "Sconto", + "sub_total": "Sub Totale", + "invoice": "Fattura | Fatture", + "invoice_number": "Numero Fattura", + "ref_number": "Rif Numero", + "contact": "Contatto", + "add_item": "Aggiungi Commessa/Item", + "date": "Data", + "due_date": "Data di pagamento", + "status": "Stato", + "add_tax": "Aggiungi Imposta", + "amount": "Ammontare", + "action": "Azione", + "notes": "Note", + "view": "Vedi", + "send_invoice": "Invia Fattura", + "resend_invoice": "Resend Invoice", + "invoice_template": "Modello Fattura", + "template": "Modello", + "mark_as_sent": "Segna come inviata", + "confirm_send_invoice": "Questa fattura sarà inviata via Mail al Cliente", + "invoice_mark_as_sent": "Questa fattura sarà contrassegnata come inviata", + "confirm_send": "Questa fattura sarà inviata via Mail al Cliente", + "invoice_date": "Data fattura", + "record_payment": "Registra Pagamento", + "add_new_invoice": "Aggiungi nuova Fattura", + "update_expense": "Aggiorna Costo", + "edit_invoice": "Modifica Fattura", + "new_invoice": "Nuova Fattura", + "save_invoice": "Salva fattura", + "update_invoice": "Aggiorna Fattura", + "add_new_tax": "Aggiungi tassa/imposta", + "no_invoices": "Ancora nessuna fattura!", + "list_of_invoices": "Questa sezione conterrà la lista delle Fatture.", + "select_invoice": "Seleziona Fattura", + "no_matching_invoices": "Nessuna fattura trovata!", + "mark_as_sent_successfully": "Fattura contassegnata come inviata con successo", + "invoice_sent_successfully": "Fattura inviata con successo", + "cloned_successfully": "Fattura copiata con successo", + "clone_invoice": "Clona Fattura", + "confirm_clone": "Questa fattura verrà clonata in una nuova fattura", + "item": { + "title": "Titolo Commessa", + "description": "Descrizione", + "quantity": "Quantità", + "price": "Prezzo", + "discount": "Sconto", + "total": "Totale", + "total_discount": "Sconto Totale", + "sub_total": "Sub Totale", + "tax": "Tassa", + "amount": "Ammontare", + "select_an_item": "Scrivi o clicca per selezionare un item", + "type_item_description": "Scrivi una descrizione (opzionale)" + }, + "confirm_delete": "Non potrai recuperare la Fattura cancellata | Non potrai recuperare le Fatture cancellate", + "created_message": "Fattura creata con successo", + "updated_message": "Fattura aggiornata con successo", + "deleted_message": "Fattura cancellata con successo | Fatture cancellate con successo", + "marked_as_sent_message": "Fattura contrassegnata come inviata con successo", + "something_went_wrong": "Si è verificato un errore", + "invalid_due_amount_message": "L'ammontare totale della fattura non può essere inferiore all'ammontare totale pagato per questa fattura. Modifica la fattura o cancella i pagamenti associati per continuare." + }, + "payments": { + "title": "Pagamenti", + "payments_list": "Lista Pagamenti", + "record_payment": "Registra Pagamento", + "customer": "Cliente", + "date": "Data", + "amount": "Ammontare", + "action": "Azione", + "payment_number": "Numero di pagamento", + "payment_mode": "Modalità di Pagamento", + "invoice": "Fattura", + "note": "Nota", + "add_payment": "Aggiungi Pagamento", + "new_payment": "Nuovo Pagamento", + "edit_payment": "Modifica Pagamento", + "view_payment": "Vedi Pagamento", + "add_new_payment": "Aggiungi nuovo pagamento", + "send_payment_receipt": "Invia ricevuta di pagamento", + "send_payment": "Inviare il pagamento", + "save_payment": "Salva pagamento", + "update_payment": "Aggiorna pagamento", + "payment": "Pagamento | Pagamenti", + "no_payments": "Ancora nessun pagamento!", + "not_selected": "Not selected", + "no_invoice": "No invoice", + "no_matching_payments": "Non ci sono pagamenti!", + "list_of_payments": "Questa sezione conterrà la lista dei pagamenti.", + "select_payment_mode": "Seleziona modalità di pagamento", + "confirm_mark_as_sent": "Questo preventivo verrà contrassegnato come inviato", + "confirm_send_payment": "Questo pagamento verrà inviato via email al cliente", + "send_payment_successfully": "Pagamento inviato con successo", + "something_went_wrong": "si è verificato un errore", + "confirm_delete": "Non potrai recuperare questo pagamento | Non potrai recuperare questi pagamenti", + "created_message": "Pagamento creato con successo", + "updated_message": "Pagamento aggiornato con successo", + "deleted_message": "Pagamento cancellato con successo | Pagamenti cancellati con successo", + "invalid_amount_message": "L'ammontare del pagamento non è valido" + }, + "expenses": { + "title": "Spese", + "expenses_list": "Lista Costi", + "select_a_customer": "Seleziona Cliente", + "expense_title": "Titolo", + "customer": "Cliente", + "contact": "Contatto", + "category": "Categoria", + "from_date": "Dalla Data", + "to_date": "Alla Data", + "expense_date": "Data", + "description": "Descrizione", + "receipt": "Ricevuta", + "amount": "Ammontare", + "action": "Azione", + "not_selected": "Not selected", + "note": "Nota", + "category_id": "Id categoria", + "date": "Data Spesa", + "add_expense": "Aggiungi Spesa", + "add_new_expense": "Aggiungi nuova Spesa", + "save_expense": "Salva la Spesa", + "update_expense": "Aggiorna Spesa", + "download_receipt": "Scarica la Ricevuta", + "edit_expense": "Modifica Spesa", + "new_expense": "Nuova Spesa", + "expense": "Spesa | Spese", + "no_expenses": "Ancora nessuna spesa!", + "list_of_expenses": "Questa sezione conterrà la lista delle Spese.", + "confirm_delete": "Non potrai recuperare questa spesa | Non potrai recuperare queste spese", + "created_message": "Spesa creata con successo", + "updated_message": "Spesa modificata con successo", + "deleted_message": "Spesa cancellata con successo | Spese cancellate con successo", + "categories": { + "categories_list": "Lista categorie", + "title": "Titolo", + "name": "Nome", + "description": "Descrizione", + "amount": "Ammontare", + "actions": "Azioni", + "add_category": "Aggiungi Categoria", + "new_category": "Nuova Categoria", + "category": "Categoria | Categorie", + "select_a_category": "Seleziona Categoria" + } + }, + "login": { + "email": "Email", + "password": "Password", + "forgot_password": "Password dimenticata?", + "or_signIn_with": "o fai login con", + "login": "Login", + "register": "Registrati", + "reset_password": "Resetta Password", + "password_reset_successfully": "Password Resettata con successo", + "enter_email": "Inserisci email", + "enter_password": "Inserisci Password", + "retype_password": "Ridigita Password" + }, + "users": { + "title": "Users", + "users_list": "Users List", + "name": "Nome", + "description": "Descrizione", + "added_on": "Aggiunto il", + "date_of_creation": "Data di creazione", + "action": "Azione", + "add_user": "Add User", + "save_user": "Save User", + "update_user": "Update User", + "user": "User | Users", + "add_new_user": "Add New User", + "new_user": "New User", + "edit_user": "Edit User", + "no_users": "No users yet!", + "list_of_users": "This section will contain the list of users.", + "email": "Email", + "phone": "Telefono", + "password": "Password", + "user_attached_message": "Non puoi eliminare una Commessa che è già attiva", + "confirm_delete": "You will not be able to recover this User | You will not be able to recover these Users", + "created_message": "User created successfully", + "updated_message": "User updated successfully", + "deleted_message": "User deleted successfully | User deleted successfully" + }, + "reports": { + "title": "Report", + "from_date": "Da", + "to_date": "A", + "status": "Stato", + "paid": "Pagato", + "unpaid": "Non pagato", + "download_pdf": "Scarica PDF", + "view_pdf": "Vedi PDF", + "update_report": "Aggiorna Report", + "report": "Report | Reports", + "profit_loss": { + "profit_loss": "Guadagni & Perdite", + "to_date": "A", + "from_date": "Da", + "date_range": "Seleziona intervallo date" + }, + "sales": { + "sales": "Vendite", + "date_range": "Seleziona intervallo date", + "to_date": "A", + "from_date": "Da", + "report_type": "Tipo di report" + }, + "taxes": { + "taxes": "Tasse", + "to_date": "Alla data", + "from_date": "Dalla data", + "date_range": "Seleziona intervallo date" + }, + "errors": { + "required": "Campo obbligatorio" + }, + "invoices": { + "invoice": "Fattura", + "invoice_date": "Data fattura", + "due_date": "Data di pagamento", + "amount": "Ammontare", + "contact_name": "Nome contatto", + "status": "Stato" + }, + "estimates": { + "estimate": "Preventivo", + "estimate_date": "Data preventivo", + "due_date": "Data di pagamento", + "estimate_number": "Numero di preventivo", + "ref_number": "Numero di Rif.", + "amount": "Ammontare", + "contact_name": "Nome contatto", + "status": "Stato" + }, + "expenses": { + "expenses": "Spese", + "category": "Categoria", + "date": "Data", + "amount": "Ammontare", + "to_date": "Alla data", + "from_date": "Dalla data", + "date_range": "Seleziona intervallo date" + } + }, + "settings": { + "menu_title": { + "account_settings": "Impostazioni Account", + "company_information": "Informazioni Azienda", + "customization": "Personalizzazione", + "preferences": "Opzioni", + "notifications": "Notifiche", + "tax_types": "Tupi di Tasse", + "expense_category": "Categorie di spesa", + "update_app": "Aggiorna App", + "backup": "Backup", + "file_disk": "File Disk", + "custom_fields": "Campi personalizzati", + "payment_modes": "Payment Modes", + "notes": "Note" + }, + "title": "Impostazioni", + "setting": "Opzione | Impostazioni", + "general": "Generale", + "language": "Lingua", + "primary_currency": "Valuta Principale", + "timezone": "Time Zone", + "date_format": "Formato data", + "currencies": { + "title": "Valute", + "currency": "Valùta | Valute", + "currencies_list": "Lista valute", + "select_currency": "Seleziona Valùta", + "name": "Nome", + "code": "Codice", + "symbol": "Simbolo", + "precision": "Precisione", + "thousand_separator": "Separatore migliaia", + "decimal_separator": "Separatore decimali", + "position": "Posizione", + "position_of_symbol": "Posizione del Simbolo", + "right": "Destra", + "left": "Sinistra", + "action": "Azione", + "add_currency": "Aggiungi Valùta" + }, + "mail": { + "host": "Mail Host", + "port": "Mail - Porta", + "driver": "Mail Driver", + "secret": "Secret", + "mailgun_secret": "Mailgun Secret", + "mailgun_domain": "Domain", + "mailgun_endpoint": "Mailgun Endpoint", + "ses_secret": "SES Secret", + "ses_key": "SES Key", + "password": "Mail Password", + "username": "Mail Username", + "mail_config": "Configurazione Mail", + "from_name": "Nome Mittente Mail", + "from_mail": "Indirizzo Mittente Mail", + "encryption": "Tipo di cifratura Mail", + "mail_config_desc": "Form per Configurazione Driver Mail per invio mail dall'App. Puoi anche configurare providers di terze parti come Sendgrid, SES, etc.." + }, + "pdf": { + "title": "Configurazione PDF", + "footer_text": "Testo Footer", + "pdf_layout": "Layout PDF" + }, + "company_info": { + "company_info": "Info azienda", + "company_name": "Nome azienda", + "company_logo": "Logo azienda", + "section_description": "Informazioni sulla tua azienda che saranno mostrate in fattura, preventivi ed altri documenti creati dell'applicazione.", + "phone": "Telefono", + "country": "Paese", + "state": "Stato", + "city": "Città", + "address": "Indirizzo", + "zip": "CAP", + "save": "Salva", + "updated_message": "Informazioni Azienda aggiornate con successo." + }, + "custom_fields": { + "title": "Campi personalizzati", + "section_description": "Customize your Invoices, Estimates & Payment Receipts with your own fields. Make sure to use the below added fields on the address formats on Customization settings page.", + "add_custom_field": "Aggiungi campo personalizzato", + "edit_custom_field": "Modifica campo personalizzato", + "field_name": "Nome campo", + "label": "Etichetta", + "type": "genere", + "name": "Nome", + "required": "Necessaria", + "placeholder": "segnaposto", + "help_text": "Testo guida", + "default_value": "Valore predefinito", + "prefix": "Prefisso", + "starting_number": "Numero iniziale", + "model": "Modella", + "help_text_description": "Inserisci del testo per aiutare gli utenti a comprendere lo scopo di questo campo personalizzato.", + "suffix": "Suffisso", + "yes": "sì", + "no": "No", + "order": "Ordine", + "custom_field_confirm_delete": "Non sarai in grado di recuperare questo campo personalizzato", + "already_in_use": "Il campo personalizzato è già in uso", + "deleted_message": "Campo personalizzato eliminato correttamente", + "options": "opzioni", + "add_option": "Aggiungi opzioni", + "add_another_option": "Aggiungi un'altra opzione", + "sort_in_alphabetical_order": "Ordina in ordine alfabetico", + "add_options_in_bulk": "Aggiungi opzioni in blocco", + "use_predefined_options": "Usa opzioni predefinite", + "select_custom_date": "Seleziona la data personalizzata", + "select_relative_date": "Seleziona la data relativa", + "ticked_by_default": "Contrassegnato per impostazione predefinita", + "updated_message": "Campo personalizzato aggiornato correttamente", + "added_message": "Campo personalizzato aggiunto correttamente" + }, + "customization": { + "customization": "personalizzazione", + "save": "Salva", + "addresses": { + "title": "Indirizzi", + "section_description": "Puoi settare l'indirizzo di fatturazione del Cliente e/o il formato dell'indirizzo di spedizione (Mostrato solo sul PDF). ", + "customer_billing_address": "Indirizzo Fatturazione Cliente", + "customer_shipping_address": "Indirizzo spedizione Cliente", + "company_address": "Indirizzo Azienda", + "insert_fields": "Inserisci Campi", + "contact": "Contatto", + "address": "Indirizzo", + "display_name": "Mostra nome", + "primary_contact_name": "Nome contatto primario", + "email": "Email", + "website": "Sito web", + "name": "Nome", + "country": "Paese", + "state": "Stato", + "city": "Città", + "company_name": "Nome Azienda", + "address_street_1": "Indirizzo 1", + "address_street_2": "Indirizzo 2", + "phone": "Telefono", + "zip_code": "CAP/ZIP Code", + "address_setting_updated": "Indirizzo aggiornato con Successo" + }, + "updated_message": "Info azienda aggiornate con successo", + "invoices": { + "title": "Fatture", + "notes": "Note", + "invoice_prefix": "Prefisso Fattura", + "default_invoice_email_body": "Default Invoice Email Body", + "invoice_settings": "Impostazioni fattura", + "autogenerate_invoice_number": "Auto genera numero di fattura", + "autogenerate_invoice_number_desc": "Disabilita, se non vuoi auto-generare i numeri delle fatture ogni volta che crei una nuova fattura.", + "enter_invoice_prefix": "Inserisci prefisso fattura", + "terms_and_conditions": "Termini e Condizioni", + "company_address_format": "Company Address Format", + "shipping_address_format": "Shipping Address Format", + "billing_address_format": "Billing Address Format", + "invoice_settings_updated": "Impostazioni fatture aggiornate con successo" + }, + "estimates": { + "title": "Preventivi", + "estimate_prefix": "Prefisso Preventivi", + "default_estimate_email_body": "Default Estimate Email Body", + "estimate_settings": "Impostazioni Preventivi", + "autogenerate_estimate_number": "Auto-genera Numero di preventivo", + "estimate_setting_description": "Disabilita, se non vuoi autogenerare il numero di preventivo ogni volta che ne viene creato uno nuovo.", + "enter_estimate_prefix": "Inserisci prefisso preventivo", + "estimate_setting_updated": "Impostazioni preventivi aggiornate con successo", + "company_address_format": "Company Address Format", + "billing_address_format": "Billing Address Format", + "shipping_address_format": "Shipping Address Format" + }, + "payments": { + "title": "Pagamenti", + "description": "Modes of transaction for payments", + "payment_prefix": "Prefisso Pagamento", + "default_payment_email_body": "Default Payment Email Body", + "payment_settings": "Impostazioni Pagamento", + "autogenerate_payment_number": "Auto genera il numero di Pagamento", + "payment_setting_description": "Disabilita, se non vuoi autogenerare il numero di pagamento ogni volta che ne viene creato uno nuovo.", + "enter_payment_prefix": "Inserisci prefisso di pagamento", + "payment_setting_updated": "Impostazioni di pagamento aggiornate con successo", + "payment_modes": "Payment Modes", + "add_payment_mode": "Aggiungi modalità di pagamento", + "edit_payment_mode": "Modifica modalità di pagamento", + "mode_name": "Nome modalità", + "payment_mode_added": "Modalità di pagamento aggiunta", + "payment_mode_updated": "Modalità di pagamento aggiornata", + "payment_mode_confirm_delete": "Non potrai ripristinare la modalità di pagamento", + "already_in_use": "Modalità di pagamento già in uso", + "deleted_message": "Payment Mode deleted successfully", + "company_address_format": "Company Address Format", + "from_customer_address_format": "From Customer Address Format" + }, + "items": { + "title": "Commesse", + "units": "unità", + "add_item_unit": "Aggiungi Unità Item", + "edit_item_unit": "Modifica unità articolo", + "unit_name": "Nome", + "item_unit_added": "Unità aggiunta", + "item_unit_updated": "Unità aggiornata", + "item_unit_confirm_delete": "Non potrai ripristinare questa unità Item", + "already_in_use": "Unità Item già in uso", + "deleted_message": "Unità item eliminata con successo" + }, + "notes": { + "title": "Note", + "description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", + "notes": "Note", + "type": "genere", + "add_note": "Add Note", + "add_new_note": "Add New Note", + "name": "Nome", + "edit_note": "Edit Note", + "note_added": "Note added successfully", + "note_updated": "Note Updated successfully", + "note_confirm_delete": "You will not be able to recover this Note", + "already_in_use": "Note is already in use", + "deleted_message": "Note deleted successfully" + } + }, + "account_settings": { + "profile_picture": "Immagine profilo", + "name": "Nome", + "email": "Email", + "password": "Password", + "confirm_password": "Conferma Password", + "account_settings": "Impostazioni Account", + "save": "Salva", + "section_description": "Puoi aggiornare nome email e password utilizzando il form qui sotto.", + "updated_message": "Impostazioni account aggiornate con successo" + }, + "user_profile": { + "name": "Nome", + "email": "Email", + "password": "Password", + "confirm_password": "Conferma Password" + }, + "notification": { + "title": "Notifica", + "email": "Invia notifiche a", + "description": "Quali notifiche email vorresti ricevere quando qualcosa cambia?", + "invoice_viewed": "Fattura visualizzata", + "invoice_viewed_desc": "Quando il cliente visualizza la fattura inviata via dashboard applicazione.", + "estimate_viewed": "Preventivo visualizzato", + "estimate_viewed_desc": "Quando il cliente visualizza il preventivo inviato dall'applicazione.", + "save": "Salva", + "email_save_message": "Email salvata con successo", + "please_enter_email": "Inserisci Email" + }, + "tax_types": { + "title": "Tipi di Imposta", + "add_tax": "Aggiungi Imposta", + "edit_tax": "Modifica imposta", + "description": "Puoi aggiongere e rimuovere imposte a piacimento. Vengono supportate Tasse differenti per prodotti/servizi specifici esattamento come per le fatture.", + "add_new_tax": "Aggiungi nuova imposta", + "tax_settings": "Impostazioni Imposte", + "tax_per_item": "Tassa per prodotto/servizio", + "tax_name": "Nome imposta", + "compound_tax": "Imposta composta", + "percent": "Percento", + "action": "Azione", + "tax_setting_description": "Abilita se vuoi aggiungere imposte specifiche per prodotti o servizi. Di default le imposte sono aggiunte direttamente alla fattura.", + "created_message": "Tipo di imposta creato con successo", + "updated_message": "Tipo di imposta aggiornato con successo", + "deleted_message": "Tipo di imposta eliminato con successo", + "confirm_delete": "Non potrai ripristinare questo tipo di imposta", + "already_in_use": "Imposta già in uso" + }, + "expense_category": { + "title": "Categorie di spesa", + "action": "Azione", + "description": "Le categorie sono necessarie per aggiungere delle voci di spesa. Puoi aggiungere o eliminare queste categorie in base alle tue preferenze.", + "add_new_category": "Aggiungi nuova categoria", + "add_category": "Aggiungi categoria", + "edit_category": "Modifica categoria", + "category_name": "Nome Categoria", + "category_description": "Descrizione", + "created_message": "Categoria di spesa creata con successo", + "deleted_message": "Categoria di spesa eliminata con successo", + "updated_message": "Categoria di spesa aggiornata con successo", + "confirm_delete": "Non potrai ripristinare questa categoria di spesa", + "already_in_use": "Categoria già in uso" + }, + "preferences": { + "currency": "Valùta", + "default_language": "Default Language", + "time_zone": "Time Zone", + "fiscal_year": "Anno finanziario", + "date_format": "Formato Data", + "discount_setting": "Impostazione Sconto", + "discount_per_item": "Sconto Per Item ", + "discount_setting_description": "Abilita se vuoi aggiungere uno sconto ad uno specifica fattura. Di default, lo sconto è aggiunto direttamente in fattura.", + "save": "Salva", + "preference": "Preferenza | Preferenze", + "general_settings": "Impostazioni di default del sistema.", + "updated_message": "Preferenze aggiornate con successo", + "select_language": "seleziona lingua", + "select_time_zone": "Seleziona Time Zone", + "select_date_format": "Select Date Format", + "select_financial_year": "Seleziona anno finanziario" + }, + "update_app": { + "title": "Aggiorna App", + "description": "Puoi facilmente aggiornare l'app. Aggiorna cliccando sul bottone qui sotto", + "check_update": "Controllo aggiornamenti", + "avail_update": "Aggiornamento disponibile", + "next_version": "Versione successiva", + "requirements": "Requirements", + "update": "Aggiorna ora", + "update_progress": "Aggiornamento in corso...", + "progress_text": "Sarà necessario qualche minuto. Per favore non aggiornare la pagina e non chiudere la finestra prima che l'aggiornamento sia completato", + "update_success": "L'App è aggiornata! Attendi che la pagina venga ricaricata automaticamente.", + "latest_message": "Nessun aggiornamneto disponibile! Sei già alla versione più recente.", + "current_version": "Versione corrente", + "download_zip_file": "Scarica il file ZIP", + "unzipping_package": "Pacchetto di decompressione", + "copying_files": "Copia dei file", + "running_migrations": "Esecuzione delle migrazioni", + "finishing_update": "Aggiornamento di finitura", + "update_failed": "Aggiornamento non riuscito", + "update_failed_text": "Scusate! L'aggiornamento non è riuscito il: passaggio {step}" + }, + "backup": { + "title": "Backup | Backups", + "description": "The backup is a zipfile that contains all files in the directories you specify along with a dump of your database", + "new_backup": "Add New Backup", + "create_backup": "Create Backup", + "select_backup_type": "Select Backup Type", + "backup_confirm_delete": "You will not be able to recover this Backup", + "path": "path", + "new_disk": "New Disk", + "created_at": "created at", + "size": "size", + "dropbox": "dropbox", + "local": "local", + "healthy": "healthy", + "amount_of_backups": "amount of backups", + "newest_backups": "newest backups", + "used_storage": "used storage", + "select_disk": "Select Disk", + "action": "Azione", + "deleted_message": "Backup deleted successfully", + "created_message": "Backup created successfully", + "invalid_disk_credentials": "Invalid credential of selected disk" + }, + "disk": { + "title": "File Disk | File Disks", + "description": "By default, Crater will use your local disk for saving backups, avatar and other image files. You can configure more than one disk drivers like DigitalOcean, S3 and Dropbox according to your preference.", + "created_at": "created at", + "dropbox": "dropbox", + "name": "Nome", + "driver": "Driver", + "disk_type": "genere", + "disk_name": "Disk Name", + "new_disk": "Add New Disk", + "filesystem_driver": "Filesystem Driver", + "local_driver": "local Driver", + "local_root": "local Root", + "public_driver": "Public Driver", + "public_root": "Public Root", + "public_url": "Public URL", + "public_visibility": "Public Visibility", + "media_driver": "Media Driver", + "media_root": "Media Root", + "aws_driver": "AWS Driver", + "aws_key": "AWS Key", + "aws_secret": "AWS Secret", + "aws_region": "AWS Region", + "aws_bucket": "AWS Bucket", + "aws_root": "AWS Root", + "do_spaces_type": "Do Spaces type", + "do_spaces_key": "Do Spaces key", + "do_spaces_secret": "Do Spaces Secret", + "do_spaces_region": "Do Spaces Region", + "do_spaces_bucket": "Do Spaces Bucket", + "do_spaces_endpoint": "Do Spaces Endpoint", + "do_spaces_root": "Do Spaces Root", + "dropbox_type": "Dropbox Type", + "dropbox_token": "Dropbox Token", + "dropbox_key": "Dropbox Key", + "dropbox_secret": "Dropbox Secret", + "dropbox_app": "Dropbox App", + "dropbox_root": "Dropbox Root", + "default_driver": "Default Driver", + "is_default": "IS DEFAULT", + "set_default_disk": "Set Default Disk", + "success_set_default_disk": "Disk set as default successfully", + "save_pdf_to_disk": "Save PDFs to Disk", + "disk_setting_description": " Enable this, if you wish to save a copy of each Invoice, Estimate & Payment Receipt PDF on your default disk automatically. Turning this option will decrease the load-time when viewing the PDFs.", + "select_disk": "Select Disk", + "disk_settings": "Disk Settings", + "confirm_delete": "Your existing files & folders in the specified disk will not be affected but your disk configuration will be deleted from Crater", + "action": "Azione", + "edit_file_disk": "Edit File Disk", + "success_create": "Disk added successfully", + "success_update": "Disk updated successfully", + "error": "Disk addition failed", + "deleted_message": "File Disk deleted successfully", + "disk_variables_save_successfully": "Disk Configured Successfully", + "disk_variables_save_error": "Disk configuration failed.", + "invalid_disk_credentials": "Invalid credential of selected disk" + } + }, + "wizard": { + "account_info": "Informazioni Account", + "account_info_desc": "I dettagli qui sotto verranno usati per creare l'account principale dell'Amministratore. Puoi modificarli in qualsiasi momento dopo esserti loggato come Amministratore.", + "name": "Nome", + "email": "Email", + "password": "Password", + "confirm_password": "Conferma Password", + "save_cont": "Salva & Continua", + "company_info": "Informazioni Azienda", + "company_info_desc": "Questa informazione verrà mostrata nelle fatture. Puoi modificare queste informazione in un momento successivo dalla pagina delle impostazioni.", + "company_name": "Nome Azienda", + "company_logo": "Logo Azienda", + "logo_preview": "Anteprima Logo", + "preferences": "Impostazioni", + "preferences_desc": "Impostazioni di default del sistema.", + "country": "Paese", + "state": "Stato", + "city": "Città", + "address": "Indirizzo", + "street": "Indirizzo1 | Indirizzo2", + "phone": "Telefono", + "zip_code": "CAP/Zip Code", + "go_back": "Torna indietro", + "currency": "Valùta", + "language": "Lingua", + "time_zone": "Time Zone", + "fiscal_year": "Anno Finanziario", + "date_format": "Formato Date", + "from_address": "Indirizzo - Da", + "username": "Username", + "next": "Successivo", + "continue": "Continua", + "skip": "Salta", + "database": { + "database": "URL del sito & database", + "connection": "Connessione Database", + "host": "Database Host", + "port": "Database - Porta", + "password": "Database Password", + "app_url": "App URL", + "app_domain": "App Domain", + "username": "Database Username", + "db_name": "Database Nome", + "db_path": "Database Path", + "desc": "Crea un database sul tuo server e setta le credenziali usando il form qui sotto." + }, + "permissions": { + "permissions": "Permessi", + "permission_confirm_title": "Sei sicuro di voler continuare?", + "permission_confirm_desc": "Controllo sui permessi Cartelle, fallito", + "permission_desc": "Qui sotto la lista dei permessi richiesti per far funzionare correttamente l'App. Se il controllo dei permessi fallisce, assicurati di aggiornare/modificare i permessi sulle cartelle." + }, + "mail": { + "host": "Mail Host", + "port": "Mail - Porta", + "driver": "Mail Driver", + "secret": "Secret", + "mailgun_secret": "Mailgun Secret", + "mailgun_domain": "Domain", + "mailgun_endpoint": "Mailgun Endpoint", + "ses_secret": "SES Secret", + "ses_key": "SES Key", + "password": "Mail Password", + "username": "Mail Username", + "mail_config": "Configurazione Mail", + "from_name": "Nome mittente mail", + "from_mail": "Indirizzo mittente mail", + "encryption": "Tipo di cifratura Mail", + "mail_config_desc": "Form per configurazione del 'driver mail' per inviare emails dall'App. Puoi anche configurare servizi di terze parti come Sendgrid, SES, ecc.." + }, + "req": { + "system_req": "Requisiti di Sistema", + "php_req_version": "Php (versione {version} richiesta)", + "check_req": "Controllo Requisiti", + "system_req_desc": "Crater ha alcuni requisiti di sistema. Assicurati che il server ha la versione di php richiesta e tutte le estensioni necessarie." + }, + "errors": { + "migrate_failed": "Migrate Failed", + "database_variables_save_error": "Cannot write configuration to .env file. Please check its file permissions", + "mail_variables_save_error": "Email configuration failed.", + "connection_failed": "Database connection failed", + "database_should_be_empty": "Database should be empty" + }, + "success": { + "mail_variables_save_successfully": "Email configurata con successo", + "database_variables_save_successfully": "Database configurato con successo." + } + }, + "validation": { + "invalid_phone": "Numero di telefono invalido", + "invalid_url": "URL non valido (es: http://www.craterapp.com)", + "invalid_domain_url": "URL non valido (es: craterapp.com)", + "required": "Campo obbligatorio", + "email_incorrect": "Email non corretta.", + "email_already_taken": "Email già in uso.", + "email_does_not_exist": "L'utente con questa email non esiste", + "item_unit_already_taken": "Questo nome item è già utilizzato", + "payment_mode_already_taken": "Questa modalità di pagamento è già stata inserita.", + "send_reset_link": "Invia Link di Reset", + "not_yet": "Non ancora? Invia di nuovo", + "password_min_length": "La password deve contenere {count} caratteri", + "name_min_length": "Il nome deve avere almeno {count} lettere.", + "enter_valid_tax_rate": "Inserisci un tasso di imposta valido", + "numbers_only": "Solo numeri.", + "characters_only": "Solo caratteri.", + "password_incorrect": "La Password deve essere identica", + "password_length": "La password deve essere lunga {count} caratteri.", + "qty_must_greater_than_zero": "La quantità deve essere maggiore di zero.", + "price_greater_than_zero": "Il prezzo deve essere maggiore di zero.", + "payment_greater_than_zero": "Il pagamento deve essere maggiore di zero.", + "payment_greater_than_due_amount": "Il pagamento inserito è maggiore di quello indicato in fattura.", + "quantity_maxlength": "La Quantità non può essere maggiore di 20 cifre.", + "price_maxlength": "Il prezzo non può contenere più di 20 cifre.", + "price_minvalue": "Il prezzo deve essere maggiore di 0.", + "amount_maxlength": "La somma non deve contenere più di 20 cifre.", + "amount_minvalue": "La somma deve essere maggiore di 0.", + "description_maxlength": "La Descrizione non deve superare i 255 caratteri.", + "subject_maxlength": "L'Oggetto non deve superare i 100 caratter.", + "message_maxlength": "Il messaggio non può superare i 255 caratteri.", + "maximum_options_error": "Massimo di {max} opzioni selezionate. Per selezionare un'altra opzione deseleziona prima una opzione.", + "notes_maxlength": "Le note non possono superare i 255 caratteri.", + "address_maxlength": "L'Indirizzo non può eccedere i 255 caratteri.", + "ref_number_maxlength": "Il Numero di Riferimento non può superare i 255 caratteri.", + "prefix_maxlength": "Il Prefisso non può superare i 5 caratteri.", + "something_went_wrong": "Si è verificato un errore" + }, + "pdf_estimate_label": "Preventivo", + "pdf_estimate_number": "Preventivo Numero", + "pdf_estimate_date": "Data preventivo", + "pdf_estimate_expire_date": "Expiry date", + "pdf_invoice_label": "Fattura", + "pdf_invoice_number": "Numero Fattura", + "pdf_invoice_date": "Data fattura", + "pdf_invoice_due_date": "Due date", + "pdf_notes": "Note", + "pdf_items_label": "Commesse", + "pdf_quantity_label": "Quantità", + "pdf_price_label": "Prezzo", + "pdf_discount_label": "Sconto", + "pdf_amount_label": "Ammontare", + "pdf_subtotal": "Subtotal", + "pdf_total": "Totale", + "pdf_payment_label": "Payment", + "pdf_payment_receipt_label": "PAYMENT RECEIPT", + "pdf_payment_date": "Payment Date", + "pdf_payment_number": "Numero di pagamento", + "pdf_payment_mode": "Modalità di Pagamento", + "pdf_payment_amount_received_label": "Amount Received", + "pdf_expense_report_label": "EXPENSES REPORT", + "pdf_total_expenses_label": "TOTAL EXPENSE", + "pdf_profit_loss_label": "PROFIT & LOSS REPORT", + "pdf_sales_customers_label": "Sales Customer Report", + "pdf_sales_items_label": "Sales Item Report", + "pdf_tax_summery_label": "Tax Summary Report", + "pdf_income_label": "INCOME", + "pdf_net_profit_label": "NET PROFIT", + "pdf_customer_sales_report": "Sales Report: By Customer", + "pdf_total_sales_label": "TOTAL SALES", + "pdf_item_sales_label": "Sales Report: By Item", + "pdf_tax_report_label": "TAX REPORT", + "pdf_total_tax_label": "TOTAL TAX", + "pdf_tax_types_label": "Tipi di Imposta", + "pdf_expenses_label": "Uscite", + "pdf_bill_to": "Fattura a,", + "pdf_ship_to": "Invia a,", + "pdf_received_from": "Received from:", + "pdf_tax_label": "imposta" +} diff --git a/resources/scripts/locales/ja.json b/resources/scripts/locales/ja.json new file mode 100644 index 000000000..60dd40e14 --- /dev/null +++ b/resources/scripts/locales/ja.json @@ -0,0 +1,1155 @@ +{ + "navigation": { + "dashboard": "ダッシュボード", + "customers": "お客様", + "items": "アイテム", + "invoices": "請求書", + "expenses": "経費", + "estimates": "見積り", + "payments": "支払い", + "reports": "レポート", + "settings": "設定", + "logout": "ログアウト", + "users": "ユーザー" + }, + "general": { + "add_company": "会社を追加", + "view_pdf": "PDFを見る", + "copy_pdf_url": "PDFURLをコピーする", + "download_pdf": "PDFをダウンロード", + "save": "セーブ", + "create": "作成する", + "cancel": "キャンセル", + "update": "更新", + "deselect": "選択を解除", + "download": "ダウンロード", + "from_date": "日付から", + "to_date": "現在まで", + "from": "から", + "to": "に", + "sort_by": "並び替え", + "ascending": "上昇", + "descending": "降順", + "subject": "件名", + "body": "体", + "message": "メッセージ", + "send": "送信", + "go_back": "戻る", + "back_to_login": "ログインに戻る?", + "home": "ホームホーム", + "filter": "フィルタ", + "delete": "削除", + "edit": "編集", + "view": "見る", + "add_new_item": "新しいアイテムを追加する", + "clear_all": "すべてクリア", + "showing": "表示中", + "of": "の", + "actions": "行動", + "subtotal": "小計", + "discount": "ディスカウント", + "fixed": "修繕", + "percentage": "パーセンテージ", + "tax": "税金", + "total_amount": "合計金額", + "bill_to": "請求書送付先", + "ship_to": "送り先", + "due": "期限", + "draft": "ドラフト", + "sent": "送信済み", + "all": "すべて", + "select_all": "すべて選択", + "choose_file": "ファイルを選択するには、ここをクリックしてください", + "choose_template": "テンプレートを選択してください", + "choose": "選択", + "remove": "削除する", + "powered_by": "搭載", + "bytefury": "Bytefury", + "select_a_status": "ステータスを選択", + "select_a_tax": "税金を選択してください", + "search": "探す", + "are_you_sure": "本気ですか?", + "list_is_empty": "リストは空です。", + "no_tax_found": "税金が見つかりません!", + "four_zero_four": "404", + "you_got_lost": "おっと!あなたは迷子になりました!", + "go_home": "家に帰る", + "test_mail_conf": "メール構成のテスト", + "send_mail_successfully": "メールは正常に送信されました", + "setting_updated": "設定が正常に更新されました", + "select_state": "状態を選択", + "select_country": "国を選択", + "select_city": "都市を選択", + "street_1": "ストリート1", + "street_2": "2丁目", + "action_failed": "アクションが失敗しました", + "retry": "リトライ", + "choose_note": "注を選択", + "no_note_found": "メモが見つかりません", + "insert_note": "メモを挿入", + "copied_pdf_url_clipboard": "PDFのURLをクリップボードにコピーしました!" + }, + "dashboard": { + "select_year": "年を選択", + "cards": { + "due_amount": "料金", + "customers": "お客様", + "invoices": "請求書", + "estimates": "見積り" + }, + "chart_info": { + "total_sales": "販売", + "total_receipts": "領収書", + "total_expense": "経費", + "net_income": "当期純利益", + "year": "年を選択" + }, + "monthly_chart": { + "title": "販売" + }, + "recent_invoices_card": { + "title": "期日請求書", + "due_on": "期限", + "customer": "お客様", + "amount_due": "料金", + "actions": "行動", + "view_all": "すべて表示" + }, + "recent_estimate_card": { + "title": "最近の見積もり", + "date": "日付", + "customer": "お客様", + "amount_due": "料金", + "actions": "行動", + "view_all": "すべて表示" + } + }, + "tax_types": { + "name": "名前", + "description": "説明", + "percent": "パーセント", + "compound_tax": "複合税" + }, + "global_search": { + "search": "探す...", + "customers": "お客様", + "users": "ユーザー", + "no_results_found": "結果が見つかりません" + }, + "customers": { + "title": "お客様", + "add_customer": "顧客を追加", + "contacts_list": "顧客リスト", + "name": "名前", + "mail": "メール|メール", + "statement": "ステートメント", + "display_name": "表示名", + "primary_contact_name": "主な連絡先名", + "contact_name": "連絡先", + "amount_due": "料金", + "email": "Eメール", + "address": "住所", + "phone": "電話", + "website": "ウェブサイト", + "overview": "概要概要", + "enable_portal": "ポータルを有効にする", + "country": "国", + "state": "状態", + "city": "市", + "zip_code": "郵便番号", + "added_on": "追加された", + "action": "アクション", + "password": "パスワード", + "street_number": "街路番号", + "primary_currency": "一次通貨", + "description": "説明", + "add_new_customer": "新規顧客の追加", + "save_customer": "顧客を救う", + "update_customer": "顧客の更新", + "customer": "顧客|お客様", + "new_customer": "新規顧客", + "edit_customer": "顧客の編集", + "basic_info": "基本情報", + "billing_address": "請求先住所", + "shipping_address": "お届け先の住所", + "copy_billing_address": "請求からコピー", + "no_customers": "まだお客様はいません!", + "no_customers_found": "顧客が見つかりません!", + "no_contact": "接触無し", + "no_contact_name": "連絡先名なし", + "list_of_customers": "このセクションには、顧客のリストが含まれます。", + "primary_display_name": "一次表示名", + "select_currency": "通貨を選択", + "select_a_customer": "顧客を選択する", + "type_or_click": "入力またはクリックして選択", + "new_transaction": "新しいトランザクション", + "no_matching_customers": "一致する顧客はありません!", + "phone_number": "電話番号", + "create_date": "日付を作成します", + "confirm_delete": "この顧客および関連するすべての請求書、見積もり、および支払いを回収することはできません。 |これらの顧客および関連するすべての請求書、見積もり、支払いを回収することはできません。", + "created_message": "顧客が正常に作成されました", + "updated_message": "お客様が正常に更新されました", + "deleted_message": "お客様が正常に削除されました|顧客は正常に削除されました" + }, + "items": { + "title": "アイテム", + "items_list": "アイテムリスト", + "name": "名前", + "unit": "単位", + "description": "説明", + "added_on": "追加された", + "price": "価格", + "date_of_creation": "作成日", + "not_selected": "アイテムが選択されていません", + "action": "アクション", + "add_item": "アイテムを追加", + "save_item": "アイテムを保存", + "update_item": "アイテムの更新", + "item": "アイテム|アイテム", + "add_new_item": "新しいアイテムを追加する", + "new_item": "新商品", + "edit_item": "アイテムの編集", + "no_items": "まだアイテムはありません!", + "list_of_items": "このセクションには、アイテムのリストが含まれます。", + "select_a_unit": "ユニットを選択", + "taxes": "税金", + "item_attached_message": "すでに使用中のアイテムは削除できません", + "confirm_delete": "このアイテムを回復することはできません|これらのアイテムを回復することはできません", + "created_message": "アイテムが正常に作成されました", + "updated_message": "アイテムが正常に更新されました", + "deleted_message": "アイテムが正常に削除されました|アイテムが正常に削除されました" + }, + "estimates": { + "title": "見積り", + "estimate": "見積もり|見積り", + "estimates_list": "見積もりリスト", + "days": "{days}日", + "months": "{months}月", + "years": "{years}年", + "all": "すべて", + "paid": "有料", + "unpaid": "未払い", + "customer": "お客様", + "ref_no": "参照番号", + "number": "数", + "amount_due": "料金", + "partially_paid": "部分的に支払われた", + "total": "合計", + "discount": "ディスカウント", + "sub_total": "小計", + "estimate_number": "見積もり番号", + "ref_number": "参照番号", + "contact": "連絡先", + "add_item": "アイテムを追加する", + "date": "日付", + "due_date": "期日", + "expiry_date": "有効期限", + "status": "状態", + "add_tax": "税金を追加する", + "amount": "量", + "action": "アクション", + "notes": "ノート", + "tax": "税金", + "estimate_template": "テンプレート", + "convert_to_invoice": "請求書に変換", + "mark_as_sent": "送信済みとしてマーク", + "send_estimate": "見積もりを送信", + "resend_estimate": "見積もりを再送", + "record_payment": "支払いの記録", + "add_estimate": "見積もりを追加", + "save_estimate": "見積もりを保存", + "confirm_conversion": "この見積もりは、新しい請求書を作成するために使用されます。", + "conversion_message": "請求書が正常に作成されました", + "confirm_send_estimate": "この見積もりは、電子メールでお客様に送信されます", + "confirm_mark_as_sent": "この見積もりは送信済みとしてマークされます", + "confirm_mark_as_accepted": "この見積もりは承認済みとしてマークされます", + "confirm_mark_as_rejected": "この見積もりは拒否としてマークされます", + "no_matching_estimates": "一致する見積もりはありません!", + "mark_as_sent_successfully": "正常に送信されたとマークされた見積もり", + "send_estimate_successfully": "見積もりは正常に送信されました", + "errors": { + "required": "フィールドは必須項目です" + }, + "accepted": "承認済み", + "rejected": "拒否されました", + "sent": "送信済み", + "draft": "ドラフト", + "declined": "辞退", + "new_estimate": "新しい見積もり", + "add_new_estimate": "新しい見積もりを追加", + "update_Estimate": "見積もりを更新", + "edit_estimate": "見積もりの編集", + "items": "アイテム", + "Estimate": "見積もり|見積り", + "add_new_tax": "新しい税金を追加する", + "no_estimates": "まだ見積もりはありません!", + "list_of_estimates": "このセクションには、見積もりのリストが含まれます。", + "mark_as_rejected": "拒否済みとしてマーク", + "mark_as_accepted": "承認済みとしてマーク", + "marked_as_accepted_message": "承認済みとしてマークされた見積もり", + "marked_as_rejected_message": "拒否としてマークされた見積もり", + "confirm_delete": "この見積もりを回復することはできません|これらの見積もりを復元することはできません", + "created_message": "見積もりが正常に作成されました", + "updated_message": "見積もりが正常に更新されました", + "deleted_message": "推定は正常に削除されました|推定値は正常に削除されました", + "something_went_wrong": "何かがうまくいかなかった", + "item": { + "title": "アイテムタイトル", + "description": "説明", + "quantity": "量", + "price": "価格", + "discount": "ディスカウント", + "total": "合計", + "total_discount": "合計割引", + "sub_total": "小計", + "tax": "税金", + "amount": "量", + "select_an_item": "入力またはクリックしてアイテムを選択します", + "type_item_description": "タイプアイテム説明(オプション)" + } + }, + "invoices": { + "title": "請求書", + "invoices_list": "請求書リスト", + "days": "{days}日", + "months": "{months}月", + "years": "{years}年", + "all": "すべて", + "paid": "有料", + "unpaid": "未払い", + "viewed": "閲覧済み", + "overdue": "延滞", + "completed": "完了", + "customer": "お客様", + "paid_status": "有料ステータス", + "ref_no": "参照番号", + "number": "数", + "amount_due": "料金", + "partially_paid": "部分的に支払われた", + "total": "合計", + "discount": "ディスカウント", + "sub_total": "小計", + "invoice": "請求書|請求書", + "invoice_number": "請求書番号", + "ref_number": "参照番号", + "contact": "連絡先", + "add_item": "アイテムを追加する", + "date": "日付", + "due_date": "期日", + "status": "状態", + "add_tax": "税金を追加する", + "amount": "量", + "action": "アクション", + "notes": "ノート", + "view": "見る", + "send_invoice": "請求書を送ります", + "resend_invoice": "請求書を再送する", + "invoice_template": "請求書テンプレート", + "template": "テンプレート", + "mark_as_sent": "送信済みとしてマーク", + "confirm_send_invoice": "この請求書はメールでお客様に送信されます", + "invoice_mark_as_sent": "この請求書は送信済みとしてマークされます", + "confirm_send": "この請求書はメールでお客様に送信されます", + "invoice_date": "請求書の日付", + "record_payment": "支払いの記録", + "add_new_invoice": "新しい請求書を追加する", + "update_expense": "経費の更新", + "edit_invoice": "請求書の編集", + "new_invoice": "新しい請求書", + "save_invoice": "請求書を保存する", + "update_invoice": "請求書を更新する", + "add_new_tax": "新しい税金を追加する", + "no_invoices": "請求書はまだありません!", + "list_of_invoices": "このセクションには、請求書のリストが含まれます。", + "select_invoice": "請求書を選択", + "no_matching_invoices": "一致する請求書はありません!", + "mark_as_sent_successfully": "正常に送信済みとしてマークされた請求書", + "invoice_sent_successfully": "請求書は正常に送信されました", + "cloned_successfully": "請求書のクローンが正常に作成されました", + "clone_invoice": "クローン請求書", + "confirm_clone": "この請求書は新しい請求書に複製されます", + "item": { + "title": "アイテムタイトル", + "description": "説明", + "quantity": "量", + "price": "価格", + "discount": "ディスカウント", + "total": "合計", + "total_discount": "合計割引", + "sub_total": "小計", + "tax": "税金", + "amount": "量", + "select_an_item": "入力またはクリックしてアイテムを選択します", + "type_item_description": "タイプアイテム説明(オプション)" + }, + "confirm_delete": "この請求書を回収することはできません|これらの請求書を回収することはできません。", + "created_message": "請求書が正常に作成されました", + "updated_message": "請求書が正常に更新されました", + "deleted_message": "請求書が正常に削除されました|請求書は正常に削除されました", + "marked_as_sent_message": "正常に送信済みとしてマークされた請求書", + "something_went_wrong": "何かがうまくいかなかった", + "invalid_due_amount_message": "請求書の合計金額は、この請求書の支払い総額より少なくすることはできません。続行するには、請求書を更新するか、関連する支払いを削除してください。" + }, + "payments": { + "title": "支払い", + "payments_list": "支払いリスト", + "record_payment": "支払いの記録", + "customer": "お客様", + "date": "日付", + "amount": "量", + "action": "アクション", + "payment_number": "支払い番号", + "payment_mode": "支払いモード", + "invoice": "請求書", + "note": "注意", + "add_payment": "支払いを追加する", + "new_payment": "新規支払い", + "edit_payment": "支払いの編集", + "view_payment": "支払いを表示", + "add_new_payment": "新しい支払いを追加する", + "send_payment_receipt": "領収書を送る", + "send_payment": "支払いを送る", + "save_payment": "支払いを節約する", + "update_payment": "支払いの更新", + "payment": "支払い|支払い", + "no_payments": "まだ支払いはありません!", + "not_selected": "選択されていない", + "no_invoice": "請求書なし", + "no_matching_payments": "一致する支払いはありません!", + "list_of_payments": "このセクションには、支払いのリストが含まれます。", + "select_payment_mode": "支払いモードを選択します", + "confirm_mark_as_sent": "この見積もりは送信済みとしてマークされます", + "confirm_send_payment": "この支払いは電子メールで顧客に送信されます", + "send_payment_successfully": "支払いが正常に送信されました", + "something_went_wrong": "何かがうまくいかなかった", + "confirm_delete": "この支払いを回収することはできません|これらの支払いを回収することはできません", + "created_message": "支払いが正常に作成されました", + "updated_message": "支払いが正常に更新されました", + "deleted_message": "支払いが正常に削除されました|支払いが正常に削除されました", + "invalid_amount_message": "お支払い金額が無効です" + }, + "expenses": { + "title": "経費", + "expenses_list": "経費リスト", + "select_a_customer": "顧客を選択する", + "expense_title": "題名", + "customer": "お客様", + "contact": "連絡先", + "category": "カテゴリー", + "from_date": "日付から", + "to_date": "現在まで", + "expense_date": "日付", + "description": "説明", + "receipt": "領収書", + "amount": "量", + "action": "アクション", + "not_selected": "選択されていない", + "note": "注意", + "category_id": "カテゴリID", + "date": "日付", + "add_expense": "経費を追加する", + "add_new_expense": "新しい経費を追加する", + "save_expense": "経費を節約", + "update_expense": "経費の更新", + "download_receipt": "領収書をダウンロード", + "edit_expense": "経費の編集", + "new_expense": "新しい経費", + "expense": "経費|経費", + "no_expenses": "まだ費用はかかりません!", + "list_of_expenses": "このセクションには、経費のリストが含まれます。", + "confirm_delete": "この費用を回収することはできません|これらの費用を回収することはできません。", + "created_message": "経費が正常に作成されました", + "updated_message": "経費が正常に更新されました", + "deleted_message": "経費が正常に削除されました|経費は正常に削除されました", + "categories": { + "categories_list": "カテゴリリスト", + "title": "題名", + "name": "名前", + "description": "説明", + "amount": "量", + "actions": "行動", + "add_category": "カテゴリを追加", + "new_category": "新たなカテゴリー", + "category": "カテゴリ|カテゴリ", + "select_a_category": "カテゴリーを選ぶ" + } + }, + "login": { + "email": "Eメール", + "password": "パスワード", + "forgot_password": "パスワードをお忘れですか?", + "or_signIn_with": "またはでサインイン", + "login": "ログイン", + "register": "登録", + "reset_password": "パスワードを再設定する", + "password_reset_successfully": "パスワードが正常にリセットされました", + "enter_email": "メールアドレスを入力して", + "enter_password": "パスワードを入力する", + "retype_password": "パスワードを再入力してください" + }, + "users": { + "title": "ユーザー", + "users_list": "ユーザーリスト", + "name": "名前", + "description": "説明", + "added_on": "追加された", + "date_of_creation": "作成日", + "action": "アクション", + "add_user": "ユーザーを追加する", + "save_user": "ユーザーを保存", + "update_user": "ユーザーの更新", + "user": "ユーザー|ユーザー", + "add_new_user": "新しいユーザーを追加", + "new_user": "新しいユーザー", + "edit_user": "ユーザーの編集", + "no_users": "まだユーザーはいません!", + "list_of_users": "このセクションには、ユーザーのリストが含まれます。", + "email": "Eメール", + "phone": "電話", + "password": "パスワード", + "user_attached_message": "すでに使用中のアイテムは削除できません", + "confirm_delete": "このユーザーを回復することはできません|これらのユーザーを回復することはできません", + "created_message": "ユーザーが正常に作成されました", + "updated_message": "ユーザーが正常に更新されました", + "deleted_message": "ユーザーが正常に削除されました|ユーザーが正常に削除されました" + }, + "reports": { + "title": "報告する", + "from_date": "日付から", + "to_date": "現在まで", + "status": "状態", + "paid": "有料", + "unpaid": "未払い", + "download_pdf": "PDFをダウンロード", + "view_pdf": "PDFを見る", + "update_report": "レポートの更新", + "report": "レポート|レポート", + "profit_loss": { + "profit_loss": "利益", + "to_date": "現在まで", + "from_date": "日付から", + "date_range": "日付範囲を選択" + }, + "sales": { + "sales": "販売", + "date_range": "日付範囲を選択", + "to_date": "現在まで", + "from_date": "日付から", + "report_type": "レポートタイプ" + }, + "taxes": { + "taxes": "税金", + "to_date": "現在まで", + "from_date": "日付から", + "date_range": "日付範囲を選択" + }, + "errors": { + "required": "フィールドは必須項目です" + }, + "invoices": { + "invoice": "請求書", + "invoice_date": "請求書の日付", + "due_date": "期日", + "amount": "量", + "contact_name": "連絡先", + "status": "状態" + }, + "estimates": { + "estimate": "見積もり", + "estimate_date": "見積もり日", + "due_date": "期日", + "estimate_number": "見積もり番号", + "ref_number": "参照番号", + "amount": "量", + "contact_name": "連絡先", + "status": "状態" + }, + "expenses": { + "expenses": "経費", + "category": "カテゴリー", + "date": "日付", + "amount": "量", + "to_date": "現在まで", + "from_date": "日付から", + "date_range": "日付範囲を選択" + } + }, + "settings": { + "menu_title": { + "account_settings": "アカウント設定", + "company_information": "会社情報", + "customization": "カスタマイズ", + "preferences": "環境設定", + "notifications": "通知", + "tax_types": "税の種類", + "expense_category": "経費カテゴリ", + "update_app": "アプリを更新", + "backup": "バックアップ", + "file_disk": "ファイルディスク", + "custom_fields": "カスタムフィールド", + "payment_modes": "支払いモード", + "notes": "ノート" + }, + "title": "設定", + "setting": "設定|設定", + "general": "一般", + "language": "言語", + "primary_currency": "一次通貨", + "timezone": "タイムゾーン", + "date_format": "日付形式", + "currencies": { + "title": "通貨", + "currency": "通貨|通貨", + "currencies_list": "通貨リスト", + "select_currency": "通貨を選択", + "name": "名前", + "code": "コード", + "symbol": "シンボル", + "precision": "精度", + "thousand_separator": "サウザンドセパレーター", + "decimal_separator": "小数点記号", + "position": "ポジション", + "position_of_symbol": "シンボルの位置", + "right": "正しい", + "left": "左", + "action": "アクション", + "add_currency": "通貨を追加する" + }, + "mail": { + "host": "メールホスト", + "port": "メールポート", + "driver": "メールドライバー", + "secret": "秘密", + "mailgun_secret": "メールガンシークレット", + "mailgun_domain": "ドメイン", + "mailgun_endpoint": "Mailgunエンドポイント", + "ses_secret": "SESシークレット", + "ses_key": "SESキー", + "password": "メールパスワード", + "username": "メールユーザー名", + "mail_config": "メール設定", + "from_name": "メール名から", + "from_mail": "メールアドレスから", + "encryption": "メールの暗号化", + "mail_config_desc": "以下は、アプリからメールを送信するためのメールドライバーを構成するためのフォームです。 Sendgrid、SESなどのサードパーティプロバイダーを構成することもできます。" + }, + "pdf": { + "title": "PDF設定", + "footer_text": "フッターテキスト", + "pdf_layout": "PDFレイアウト" + }, + "company_info": { + "company_info": "会社情報", + "company_name": "会社名", + "company_logo": "会社のロゴ", + "section_description": "Craterによって作成された請求書、見積もり、およびその他のドキュメントに表示される会社に関する情報。", + "phone": "電話", + "country": "国", + "state": "状態", + "city": "市", + "address": "住所", + "zip": "ジップ", + "save": "セーブ", + "updated_message": "会社情報が正常に更新されました" + }, + "custom_fields": { + "title": "カスタムフィールド", + "section_description": "請求書、見積もりをカスタマイズする", + "add_custom_field": "カスタムフィールドの追加", + "edit_custom_field": "カスタムフィールドの編集", + "field_name": "フィールド名", + "label": "ラベル", + "type": "タイプ", + "name": "名前", + "required": "必須", + "placeholder": "プレースホルダー", + "help_text": "ヘルプテキスト", + "default_value": "デフォルト値", + "prefix": "プレフィックス", + "starting_number": "開始番号", + "model": "モデル", + "help_text_description": "ユーザーがこのカスタムフィールドの目的を理解できるように、テキストを入力してください。", + "suffix": "サフィックス", + "yes": "はい", + "no": "番号", + "order": "注文", + "custom_field_confirm_delete": "このカスタムフィールドを回復することはできません", + "already_in_use": "カスタムフィールドはすでに使用されています", + "deleted_message": "カスタムフィールドが正常に削除されました", + "options": "オプション", + "add_option": "オプションの追加", + "add_another_option": "別のオプションを追加する", + "sort_in_alphabetical_order": "アルファベット順に並べ替える", + "add_options_in_bulk": "オプションをまとめて追加する", + "use_predefined_options": "事前定義されたオプションを使用する", + "select_custom_date": "カスタム日付を選択", + "select_relative_date": "相対日付を選択", + "ticked_by_default": "デフォルトでチェックされています", + "updated_message": "カスタムフィールドが正常に更新されました", + "added_message": "カスタムフィールドが正常に追加されました" + }, + "customization": { + "customization": "カスタマイズ", + "save": "セーブ", + "addresses": { + "title": "住所", + "section_description": "顧客の請求先住所と顧客の配送先住所の形式を設定できます(PDFでのみ表示)。", + "customer_billing_address": "顧客の請求先住所", + "customer_shipping_address": "お客様の配送先住所", + "company_address": "会社の住所", + "insert_fields": "フィールドを挿入", + "contact": "連絡先", + "address": "住所", + "display_name": "表示名", + "primary_contact_name": "主な連絡先名", + "email": "Eメール", + "website": "ウェブサイト", + "name": "名前", + "country": "国", + "state": "状態", + "city": "市", + "company_name": "会社名", + "address_street_1": "住所通り1", + "address_street_2": "アドレスストリート2", + "phone": "電話", + "zip_code": "郵便番号", + "address_setting_updated": "アドレス設定が正常に更新されました" + }, + "updated_message": "会社情報が正常に更新されました", + "invoices": { + "title": "請求書", + "notes": "ノート", + "invoice_prefix": "請求書プレフィックス", + "default_invoice_email_body": "デフォルトの請求書メール本文", + "invoice_settings": "請求書の設定", + "autogenerate_invoice_number": "請求書番号の自動生成", + "autogenerate_invoice_number_desc": "新しい請求書を作成するたびに請求書番号を自動生成したくない場合は、これを無効にします。", + "invoice_email_attachment": "請求書を添付ファイルとして送信する", + "invoice_email_attachment_setting_description": "請求書を電子メールの添付ファイルとして送信する場合は、これを有効にします。メールの[請求書の表示]ボタンを有効にすると、表示されなくなることに注意してください。", + "enter_invoice_prefix": "請求書のプレフィックスを入力してください", + "terms_and_conditions": "規約と条件", + "company_address_format": "会社の住所形式", + "shipping_address_format": "配送先住所の形式", + "billing_address_format": "請求先住所の形式", + "invoice_settings_updated": "請求書設定が正常に更新されました" + }, + "estimates": { + "title": "見積り", + "estimate_prefix": "プレフィックスの見積もり", + "default_estimate_email_body": "デフォルトの見積もりメール本文", + "estimate_settings": "見積もりの設定", + "autogenerate_estimate_number": "見積もり番号の自動生成", + "estimate_setting_description": "新しい見積もりを作成するたびに見積もり番号を自動生成したくない場合は、これを無効にします。", + "estimate_email_attachment": "見積もりを添付ファイルとして送信する", + "estimate_email_attachment_setting_description": "見積もりを電子メールの添付ファイルとして送信する場合は、これを有効にします。有効にすると、メールの[見積もりを表示]ボタンが表示されなくなることに注意してください。", + "enter_estimate_prefix": "推定プレフィックスを入力します", + "estimate_setting_updated": "見積もり設定が正常に更新されました", + "company_address_format": "会社の住所形式", + "billing_address_format": "請求先住所の形式", + "shipping_address_format": "配送先住所の形式" + }, + "payments": { + "title": "支払い", + "description": "支払いの取引モード", + "payment_prefix": "支払いプレフィックス", + "default_payment_email_body": "デフォルトの支払いメール本文", + "payment_settings": "支払い設定", + "autogenerate_payment_number": "支払い番号の自動生成", + "payment_setting_description": "新しい支払いを作成するたびに支払い番号を自動生成したくない場合は、これを無効にします。", + "payment_email_attachment": "添付ファイルとして支払いを送信する", + "payment_email_attachment_setting_description": "領収書をメールの添付ファイルとして送信する場合は、これを有効にします。有効にすると、メールの[支払いの表示]ボタンが表示されなくなることに注意してください。", + "enter_payment_prefix": "支払いプレフィックスを入力してください", + "payment_setting_updated": "支払い設定が正常に更新されました", + "payment_modes": "支払いモード", + "add_payment_mode": "支払いモードの追加", + "edit_payment_mode": "支払いモードの編集", + "mode_name": "モード名", + "payment_mode_added": "支払いモードが追加されました", + "payment_mode_updated": "支払いモードが更新されました", + "payment_mode_confirm_delete": "この支払いモードを回復することはできません", + "already_in_use": "支払いモードはすでに使用されています", + "deleted_message": "支払いモードが正常に削除されました", + "company_address_format": "会社の住所形式", + "from_customer_address_format": "顧客の住所形式から" + }, + "items": { + "title": "アイテム", + "units": "単位", + "add_item_unit": "アイテムユニットを追加", + "edit_item_unit": "アイテムユニットの編集", + "unit_name": "ユニット名", + "item_unit_added": "アイテムユニットが追加されました", + "item_unit_updated": "アイテムユニットが更新されました", + "item_unit_confirm_delete": "このアイテムユニットを回復することはできません", + "already_in_use": "アイテムユニットはすでに使用されています", + "deleted_message": "アイテムユニットが正常に削除されました" + }, + "notes": { + "title": "ノート", + "description": "メモを作成して請求書や見積もりに再利用することで時間を節約できます", + "notes": "ノート", + "type": "タイプ", + "add_note": "メモを追加", + "add_new_note": "新しいメモを追加", + "name": "名前", + "edit_note": "メモを編集", + "note_added": "メモが正常に追加されました", + "note_updated": "注正常に更新されました", + "note_confirm_delete": "このメモを復元することはできません", + "already_in_use": "ノートはすでに使用されています", + "deleted_message": "メモが正常に削除されました" + } + }, + "account_settings": { + "profile_picture": "プロフィールの写真", + "name": "名前", + "email": "Eメール", + "password": "パスワード", + "confirm_password": "パスワードを認証する", + "account_settings": "アカウント設定", + "save": "セーブ", + "section_description": "あなたはあなたの名前、電子メールを更新することができます", + "updated_message": "アカウント設定が正常に更新されました" + }, + "user_profile": { + "name": "名前", + "email": "Eメール", + "password": "パスワード", + "confirm_password": "パスワードを認証する" + }, + "notification": { + "title": "通知", + "email": "に通知を送信する", + "description": "何かが変わったときにどのメール通知を受け取りたいですか?", + "invoice_viewed": "請求書を表示", + "invoice_viewed_desc": "顧客がクレーターダッシュボードを介して送信された請求書を表示したとき。", + "estimate_viewed": "閲覧した見積もり", + "estimate_viewed_desc": "顧客がクレーターダッシュボードを介して送信された見積もりを表示したとき。", + "save": "セーブ", + "email_save_message": "メールが正常に保存されました", + "please_enter_email": "メールアドレスを入力してください" + }, + "tax_types": { + "title": "税の種類", + "add_tax": "税金を追加する", + "edit_tax": "税金の編集", + "description": "必要に応じて税金を追加または削除できます。クレーターは、請求書だけでなく、個々のアイテムに対する税金もサポートしています。", + "add_new_tax": "新しい税金を追加する", + "tax_settings": "税設定", + "tax_per_item": "アイテムごとの税金", + "tax_name": "税名", + "compound_tax": "複合税", + "percent": "パーセント", + "action": "アクション", + "tax_setting_description": "個々の請求書アイテムに税金を追加する場合は、これを有効にします。デフォルトでは、税金は請求書に直接追加されます。", + "created_message": "税タイプが正常に作成されました", + "updated_message": "税タイプが正常に更新されました", + "deleted_message": "税タイプが正常に削除されました", + "confirm_delete": "この税タイプを回復することはできません", + "already_in_use": "税金はすでに使用されています" + }, + "expense_category": { + "title": "経費カテゴリ", + "action": "アクション", + "description": "経費エントリを追加するには、カテゴリが必要です。好みに応じて、これらのカテゴリを追加または削除できます。", + "add_new_category": "新しいカテゴリを追加", + "add_category": "カテゴリを追加", + "edit_category": "カテゴリの編集", + "category_name": "種別名", + "category_description": "説明", + "created_message": "経費カテゴリが正常に作成されました", + "deleted_message": "経費カテゴリが正常に削除されました", + "updated_message": "経費カテゴリが正常に更新されました", + "confirm_delete": "この経費カテゴリを回復することはできません", + "already_in_use": "カテゴリはすでに使用されています" + }, + "preferences": { + "currency": "通貨", + "default_language": "既定の言語", + "time_zone": "タイムゾーン", + "fiscal_year": "会計年度", + "date_format": "日付形式", + "discount_setting": "割引設定", + "discount_per_item": "アイテムごとの割引", + "discount_setting_description": "個々の請求書アイテムに割引を追加する場合は、これを有効にします。デフォルトでは、割引は請求書に直接追加されます。", + "save": "セーブ", + "preference": "好み|環境設定", + "general_settings": "システムのデフォルト設定。", + "updated_message": "プリファレンスが正常に更新されました", + "select_language": "言語を選択する", + "select_time_zone": "タイムゾーンを選択", + "select_date_format": "日付形式の選択", + "select_financial_year": "会計年度を選択" + }, + "update_app": { + "title": "アプリを更新", + "description": "下のボタンをクリックして新しい更新を確認することで、クレーターを簡単に更新できます。", + "check_update": "アップデートを確認する", + "avail_update": "新しいアップデートが利用可能", + "next_version": "次のバージョン", + "requirements": "要件", + "update": "今すぐアップデート", + "update_progress": "更新中...", + "progress_text": "ほんの数分かかります。更新が完了する前に、画面を更新したり、ウィンドウを閉じたりしないでください。", + "update_success": "アプリが更新されました!ブラウザウィンドウが自動的に再読み込みされるまでお待ちください。", + "latest_message": "利用可能なアップデートはありません!あなたは最新バージョンを使用しています。", + "current_version": "現行版", + "download_zip_file": "ZIPファイルをダウンロードする", + "unzipping_package": "パッケージの解凍", + "copying_files": "ファイルのコピー", + "deleting_files": "未使用ファイルの削除", + "running_migrations": "移行の実行", + "finishing_update": "更新の終了", + "update_failed": "アップデートに失敗しました", + "update_failed_text": "ごめんなさい!更新が失敗しました:{step} step" + }, + "backup": { + "title": "バックアップ|バックアップ", + "description": "バックアップは、データベースのダンプとともに、指定したディレクトリ内のすべてのファイルを含むzipファイルです。", + "new_backup": "新しいバックアップを追加する", + "create_backup": "バックアップを作成する", + "select_backup_type": "バックアップタイプを選択します", + "backup_confirm_delete": "このバックアップを回復することはできません", + "path": "道", + "new_disk": "新しいディスク", + "created_at": "で作成された", + "size": "サイズ", + "dropbox": "ドロップボックス", + "local": "地元", + "healthy": "元気", + "amount_of_backups": "バックアップの量", + "newest_backups": "最新のバックアップ", + "used_storage": "使用済みストレージ", + "select_disk": "ディスクを選択", + "action": "アクション", + "deleted_message": "バックアップが正常に削除されました", + "created_message": "バックアップが正常に作成されました", + "invalid_disk_credentials": "選択したディスクの資格情報が無効です" + }, + "disk": { + "title": "ファイルディスク|ファイルディスク", + "description": "デフォルトでは、Craterはバックアップ、アバター、その他の画像ファイルを保存するためにローカルディスクを使用します。好みに応じて、DigitalOcean、S3、Dropboxなどの複数のディスクドライバーを構成できます。", + "created_at": "で作成された", + "dropbox": "ドロップボックス", + "name": "名前", + "driver": "運転者", + "disk_type": "タイプ", + "disk_name": "ディスク名", + "new_disk": "新しいディスクを追加する", + "filesystem_driver": "ファイルシステムドライバー", + "local_driver": "ローカルドライバー", + "local_root": "ローカルルート", + "public_driver": "パブリックドライバー", + "public_root": "パブリックルート", + "public_url": "パブリックURL", + "public_visibility": "パブリックビジビリティ", + "media_driver": "メディアドライバー", + "media_root": "メディアルート", + "aws_driver": "AWSドライバー", + "aws_key": "AWSキー", + "aws_secret": "AWSシークレット", + "aws_region": "AWSリージョン", + "aws_bucket": "AWSバケット", + "aws_root": "AWSルート", + "do_spaces_type": "スペースタイプを実行します", + "do_spaces_key": "スペースキーを実行します", + "do_spaces_secret": "スペースシークレットを行う", + "do_spaces_region": "Do Spaces Region", + "do_spaces_bucket": "スペースバケットを行う", + "do_spaces_endpoint": "スペースエンドポイントを実行", + "do_spaces_root": "スペースルートを実行します", + "dropbox_type": "Dropboxタイプ", + "dropbox_token": "Dropboxトークン", + "dropbox_key": "Dropboxキー", + "dropbox_secret": "Dropboxシークレット", + "dropbox_app": "Dropboxアプリ", + "dropbox_root": "Dropboxルート", + "default_driver": "デフォルトのドライバー", + "is_default": "デフォルトです", + "set_default_disk": "デフォルトディスクの設定", + "set_default_disk_confirm": "このディスクはデフォルトとして設定され、すべての新しいPDFがこのディスクに保存されます", + "success_set_default_disk": "ディスクがデフォルトとして正常に設定されました", + "save_pdf_to_disk": "PDFをディスクに保存", + "disk_setting_description": "各請求書のコピーを保存する場合は、これを有効にします。見積もり", + "select_disk": "ディスクを選択", + "disk_settings": "ディスク設定", + "confirm_delete": "既存のファイル", + "action": "アクション", + "edit_file_disk": "ファイルディスクの編集", + "success_create": "ディスクが正常に追加されました", + "success_update": "ディスクが正常に更新されました", + "error": "ディスクの追加に失敗しました", + "deleted_message": "ファイルディスクが正常に削除されました", + "disk_variables_save_successfully": "ディスクが正常に構成されました", + "disk_variables_save_error": "ディスク構成に失敗しました。", + "invalid_disk_credentials": "選択したディスクの資格情報が無効です" + } + }, + "wizard": { + "account_info": "口座情報", + "account_info_desc": "以下の詳細は、メインの管理者アカウントを作成するために使用されます。また、ログイン後はいつでも詳細を変更できます。", + "name": "名前", + "email": "Eメール", + "password": "パスワード", + "confirm_password": "パスワードを認証する", + "save_cont": "セーブ", + "company_info": "会社情報", + "company_info_desc": "この情報は請求書に表示されます。これは後で設定ページで編集できることに注意してください。", + "company_name": "会社名", + "company_logo": "会社のロゴ", + "logo_preview": "ロゴプレビュー", + "preferences": "環境設定", + "preferences_desc": "システムのデフォルト設定。", + "country": "国", + "state": "状態", + "city": "市", + "address": "住所", + "street": "Street1 | 2丁目", + "phone": "電話", + "zip_code": "郵便番号", + "go_back": "戻る", + "currency": "通貨", + "language": "言語", + "time_zone": "タイムゾーン", + "fiscal_year": "会計年度", + "date_format": "日付形式", + "from_address": "差出人住所", + "username": "ユーザー名", + "next": "次", + "continue": "継続する", + "skip": "スキップ", + "database": { + "database": "サイトのURL", + "connection": "データベース接続", + "host": "データベースホスト", + "port": "データベースポート", + "password": "データベースパスワード", + "app_url": "アプリのURL", + "app_domain": "アプリドメイン", + "username": "データベースユーザー名", + "db_name": "データベース名", + "db_path": "データベースパス", + "desc": "サーバー上にデータベースを作成し、以下のフォームを使用して資格情報を設定します。" + }, + "permissions": { + "permissions": "権限", + "permission_confirm_title": "続行してもよろしいですか?", + "permission_confirm_desc": "フォルダのアクセス許可の確認に失敗しました", + "permission_desc": "以下は、アプリが機能するために必要なフォルダーのアクセス許可のリストです。権限チェックに失敗した場合は、必ずフォルダの権限を更新してください。" + }, + "mail": { + "host": "メールホスト", + "port": "メールポート", + "driver": "メールドライバー", + "secret": "秘密", + "mailgun_secret": "メールガンシークレット", + "mailgun_domain": "ドメイン", + "mailgun_endpoint": "Mailgunエンドポイント", + "ses_secret": "SESシークレット", + "ses_key": "SESキー", + "password": "メールパスワード", + "username": "メールユーザー名", + "mail_config": "メール設定", + "from_name": "メール名から", + "from_mail": "メールアドレスから", + "encryption": "メールの暗号化", + "mail_config_desc": "以下は、アプリからメールを送信するためのメールドライバーを構成するためのフォームです。 Sendgrid、SESなどのサードパーティプロバイダーを構成することもできます。" + }, + "req": { + "system_req": "システム要求", + "php_req_version": "PHP(バージョン{version}が必要)", + "check_req": "要件を確認する", + "system_req_desc": "クレーターにはいくつかのサーバー要件があります。サーバーに必要なphpバージョンと以下に記載されているすべての拡張機能があることを確認してください。" + }, + "errors": { + "migrate_failed": "移行に失敗しました", + "database_variables_save_error": "構成を.envファイルに書き込めません。ファイルのアクセス許可を確認してください", + "mail_variables_save_error": "電子メールの構成に失敗しました。", + "connection_failed": "データベース接続に失敗しました", + "database_should_be_empty": "データベースは空である必要があります" + }, + "success": { + "mail_variables_save_successfully": "電子メールが正常に構成されました", + "database_variables_save_successfully": "データベースが正常に構成されました。" + } + }, + "validation": { + "invalid_phone": "無効な電話番号", + "invalid_url": "無効なURL(例:http://www.craterapp.com)", + "invalid_domain_url": "無効なURL(例:craterapp.com)", + "required": "フィールドは必須項目です", + "email_incorrect": "誤ったメール。", + "email_already_taken": "メールはすでに取られています。", + "email_does_not_exist": "指定されたメールアドレスを持つユーザーは存在しません", + "item_unit_already_taken": "このアイテムのユニット名はすでに使用されています", + "payment_mode_already_taken": "この支払いモード名はすでに使用されています", + "send_reset_link": "リセットリンクを送信する", + "not_yet": "未だに?もう一度送信してください", + "password_min_length": "パスワードには{count}文字を含める必要があります", + "name_min_length": "名前には少なくとも{count}文字が必要です。", + "enter_valid_tax_rate": "有効な税率を入力してください", + "numbers_only": "数字のみ。", + "characters_only": "文字のみ。", + "password_incorrect": "パスワードは同一である必要があります", + "password_length": "パスワードは{count}文字の長さである必要があります。", + "qty_must_greater_than_zero": "数量はゼロより大きくなければなりません。", + "price_greater_than_zero": "価格はゼロより大きくなければなりません。", + "payment_greater_than_zero": "支払いはゼロより大きくなければなりません。", + "payment_greater_than_due_amount": "入力された支払いは、この請求書の支払額を超えています。", + "quantity_maxlength": "数量は20桁を超えてはなりません。", + "price_maxlength": "価格は20桁を超えてはなりません。", + "price_minvalue": "価格は0より大きくする必要があります。", + "amount_maxlength": "金額は20桁を超えてはなりません。", + "amount_minvalue": "金額は0より大きくする必要があります。", + "description_maxlength": "説明は65,000文字を超えてはなりません。", + "subject_maxlength": "件名は100文字を超えてはなりません。", + "message_maxlength": "メッセージは255文字を超えてはなりません。", + "maximum_options_error": "選択された{max}オプションの最大数。まず、選択したオプションを削除して、別のオプションを選択します。", + "notes_maxlength": "メモは65,000文字を超えてはなりません。", + "address_maxlength": "アドレスは255文字を超えてはなりません。", + "ref_number_maxlength": "参照番号は255文字を超えてはなりません。", + "prefix_maxlength": "プレフィックスは5文字を超えてはなりません。", + "something_went_wrong": "何かがうまくいかなかった" + }, + "pdf_estimate_label": "見積もり", + "pdf_estimate_number": "見積もり番号", + "pdf_estimate_date": "見積もり日", + "pdf_estimate_expire_date": "有効期限", + "pdf_invoice_label": "請求書", + "pdf_invoice_number": "請求書番号", + "pdf_invoice_date": "請求書の日付", + "pdf_invoice_due_date": "期日", + "pdf_notes": "ノート", + "pdf_items_label": "アイテム", + "pdf_quantity_label": "量", + "pdf_price_label": "価格", + "pdf_discount_label": "ディスカウント", + "pdf_amount_label": "量", + "pdf_subtotal": "小計", + "pdf_total": "合計", + "pdf_payment_label": "支払い", + "pdf_payment_receipt_label": "お支払いの領収書", + "pdf_payment_date": "支払期日", + "pdf_payment_number": "支払い番号", + "pdf_payment_mode": "支払いモード", + "pdf_payment_amount_received_label": "もらった分量", + "pdf_expense_report_label": "経費報告書", + "pdf_total_expenses_label": "総経費", + "pdf_profit_loss_label": "利益", + "pdf_sales_customers_label": "セールスカスタマーレポート", + "pdf_sales_items_label": "販売アイテムレポート", + "pdf_tax_summery_label": "税概要レポート", + "pdf_income_label": "所得", + "pdf_net_profit_label": "純利益", + "pdf_customer_sales_report": "販売レポート:顧客別", + "pdf_total_sales_label": "総売上高", + "pdf_item_sales_label": "販売レポート:アイテム別", + "pdf_tax_report_label": "税レポート", + "pdf_total_tax_label": "総税", + "pdf_tax_types_label": "税の種類", + "pdf_expenses_label": "経費", + "pdf_bill_to": "請求書送付先、", + "pdf_ship_to": "送り先、", + "pdf_received_from": "から受け取りました:", + "pdf_tax_label": "税" +} diff --git a/resources/scripts/locales/ko.json b/resources/scripts/locales/ko.json new file mode 100644 index 000000000..17d5c3599 --- /dev/null +++ b/resources/scripts/locales/ko.json @@ -0,0 +1,1155 @@ +{ + "navigation": { + "dashboard": "계기반", + "customers": "고객", + "items": "아이템", + "invoices": "송장", + "expenses": "경비", + "estimates": "견적", + "payments": "지불", + "reports": "보고서", + "settings": "설정", + "logout": "로그 아웃", + "users": "사용자" + }, + "general": { + "add_company": "회사 추가", + "view_pdf": "PDF보기", + "copy_pdf_url": "PDF URL 복사", + "download_pdf": "PDF 다운로드", + "save": "저장", + "create": "창조하다", + "cancel": "취소", + "update": "최신 정보", + "deselect": "선택 취소", + "download": "다운로드", + "from_date": "시작 날짜", + "to_date": "현재까지", + "from": "에서", + "to": "에", + "sort_by": "정렬 기준", + "ascending": "오름차순", + "descending": "내림차순", + "subject": "제목", + "body": "몸", + "message": "메시지", + "send": "보내다", + "go_back": "돌아 가기", + "back_to_login": "로그인으로 돌아가시겠습니까?", + "home": "집", + "filter": "필터", + "delete": "지우다", + "edit": "편집하다", + "view": "전망", + "add_new_item": "새 항목 추가", + "clear_all": "모두 지우기", + "showing": "전시", + "of": "의", + "actions": "행위", + "subtotal": "소계", + "discount": "할인", + "fixed": "결정된", + "percentage": "백분율", + "tax": "세", + "total_amount": "총액", + "bill_to": "청구 대상", + "ship_to": "배송지", + "due": "정당한", + "draft": "초안", + "sent": "보냄", + "all": "모두", + "select_all": "모두 선택", + "choose_file": "파일을 선택하려면 여기를 클릭하십시오", + "choose_template": "템플릿 선택", + "choose": "고르다", + "remove": "없애다", + "powered_by": "제공", + "bytefury": "바이트 퓨리", + "select_a_status": "상태 선택", + "select_a_tax": "세금 선택", + "search": "검색", + "are_you_sure": "확실합니까?", + "list_is_empty": "목록이 비어 있습니다.", + "no_tax_found": "세금이 없습니다!", + "four_zero_four": "404", + "you_got_lost": "이런! 당신은 길을 잃었습니다!", + "go_home": "집에가", + "test_mail_conf": "메일 구성 테스트", + "send_mail_successfully": "메일을 성공적으로 보냈습니다.", + "setting_updated": "설정이 성공적으로 업데이트되었습니다.", + "select_state": "주 선택", + "select_country": "국가 선택", + "select_city": "도시 선택", + "street_1": "거리 1", + "street_2": "거리 2", + "action_failed": "작업 실패", + "retry": "다시 해 보다", + "choose_note": "참고 선택", + "no_note_found": "메모를 찾을 수 없습니다.", + "insert_note": "메모 삽입", + "copied_pdf_url_clipboard": "PDF URL을 클립 보드에 복사했습니다!" + }, + "dashboard": { + "select_year": "연도 선택", + "cards": { + "due_amount": "지불액", + "customers": "고객", + "invoices": "송장", + "estimates": "견적" + }, + "chart_info": { + "total_sales": "매상", + "total_receipts": "영수증", + "total_expense": "경비", + "net_income": "순이익", + "year": "연도 선택" + }, + "monthly_chart": { + "title": "매상" + }, + "recent_invoices_card": { + "title": "만기 송장", + "due_on": "기한", + "customer": "고객", + "amount_due": "지불액", + "actions": "행위", + "view_all": "모두보기" + }, + "recent_estimate_card": { + "title": "최근 견적", + "date": "데이트", + "customer": "고객", + "amount_due": "지불액", + "actions": "행위", + "view_all": "모두보기" + } + }, + "tax_types": { + "name": "이름", + "description": "기술", + "percent": "퍼센트", + "compound_tax": "복합 세" + }, + "global_search": { + "search": "검색...", + "customers": "고객", + "users": "사용자", + "no_results_found": "검색 결과가 없습니다" + }, + "customers": { + "title": "고객", + "add_customer": "고객 추가", + "contacts_list": "고객 목록", + "name": "이름", + "mail": "메일 | 메일", + "statement": "성명서", + "display_name": "이름 표시하기", + "primary_contact_name": "기본 연락처 이름", + "contact_name": "담당자 이름", + "amount_due": "지불액", + "email": "이메일", + "address": "주소", + "phone": "전화", + "website": "웹 사이트", + "overview": "개요", + "enable_portal": "포털 활성화", + "country": "국가", + "state": "상태", + "city": "시티", + "zip_code": "우편 번호", + "added_on": "추가됨", + "action": "동작", + "password": "암호", + "street_number": "번지", + "primary_currency": "기본 통화", + "description": "기술", + "add_new_customer": "신규 고객 추가", + "save_customer": "고객 저장", + "update_customer": "고객 업데이트", + "customer": "고객 | 고객", + "new_customer": "신규 고객", + "edit_customer": "고객 편집", + "basic_info": "기본 정보", + "billing_address": "청구 지 주소", + "shipping_address": "배송 주소", + "copy_billing_address": "결제에서 복사", + "no_customers": "아직 고객이 없습니다!", + "no_customers_found": "고객이 없습니다!", + "no_contact": "연락처 없음", + "no_contact_name": "연락처 이름이 없습니다.", + "list_of_customers": "이 섹션에는 고객 목록이 포함됩니다.", + "primary_display_name": "기본 표시 이름", + "select_currency": "통화 선택", + "select_a_customer": "고객 선택", + "type_or_click": "입력하거나 클릭하여 선택", + "new_transaction": "새로운 거래", + "no_matching_customers": "일치하는 고객이 없습니다!", + "phone_number": "전화 번호", + "create_date": "날짜 생성", + "confirm_delete": "이 고객과 모든 관련 송장, 견적 및 지불을 복구 할 수 없습니다. | 이러한 고객 및 모든 관련 청구서, 견적 및 지불을 복구 할 수 없습니다.", + "created_message": "고객이 성공적으로 생성되었습니다.", + "updated_message": "고객이 성공적으로 업데이트했습니다.", + "deleted_message": "고객이 성공적으로 삭제되었습니다. | 고객이 성공적으로 삭제되었습니다." + }, + "items": { + "title": "아이템", + "items_list": "품목 목록", + "name": "이름", + "unit": "단위", + "description": "기술", + "added_on": "추가됨", + "price": "가격", + "date_of_creation": "생성 일", + "not_selected": "선택한 항목이 없습니다.", + "action": "동작", + "add_item": "아이템 추가", + "save_item": "항목 저장", + "update_item": "항목 업데이트", + "item": "항목 | 아이템", + "add_new_item": "새 항목 추가", + "new_item": "새로운 물품", + "edit_item": "항목 편집", + "no_items": "아직 항목이 없습니다!", + "list_of_items": "이 섹션에는 항목 목록이 포함됩니다.", + "select_a_unit": "단위 선택", + "taxes": "구실", + "item_attached_message": "이미 사용중인 항목은 삭제할 수 없습니다.", + "confirm_delete": "이 항목을 복구 할 수 없습니다. | 이 항목을 복구 할 수 없습니다.", + "created_message": "항목이 성공적으로 생성되었습니다.", + "updated_message": "항목이 성공적으로 업데이트되었습니다.", + "deleted_message": "항목이 성공적으로 삭제되었습니다. | 항목이 성공적으로 삭제되었습니다." + }, + "estimates": { + "title": "견적", + "estimate": "견적 | 견적", + "estimates_list": "견적 목록", + "days": "{days} 일", + "months": "{months} 개월", + "years": "{years} 년", + "all": "모두", + "paid": "유료", + "unpaid": "미지급", + "customer": "고객", + "ref_no": "참조 번호.", + "number": "번호", + "amount_due": "지불액", + "partially_paid": "부분 지불", + "total": "합계", + "discount": "할인", + "sub_total": "소계", + "estimate_number": "견적 번호", + "ref_number": "참조 번호", + "contact": "접촉", + "add_item": "항목 추가", + "date": "데이트", + "due_date": "마감일", + "expiry_date": "만료일", + "status": "상태", + "add_tax": "세금 추가", + "amount": "양", + "action": "동작", + "notes": "노트", + "tax": "세", + "estimate_template": "주형", + "convert_to_invoice": "송장으로 변환", + "mark_as_sent": "보낸 것으로 표시", + "send_estimate": "견적 보내기", + "resend_estimate": "견적 재전송", + "record_payment": "기록 지불", + "add_estimate": "견적 추가", + "save_estimate": "견적 저장", + "confirm_conversion": "이 견적은 새 인보이스를 만드는 데 사용됩니다.", + "conversion_message": "인보이스가 성공적으로 생성되었습니다.", + "confirm_send_estimate": "이 견적은 이메일을 통해 고객에게 전송됩니다.", + "confirm_mark_as_sent": "이 견적은 전송 된 것으로 표시됩니다.", + "confirm_mark_as_accepted": "이 견적은 수락 됨으로 표시됩니다.", + "confirm_mark_as_rejected": "이 견적은 거부 됨으로 표시됩니다.", + "no_matching_estimates": "일치하는 견적이 없습니다!", + "mark_as_sent_successfully": "성공적으로 전송 된 것으로 표시된 견적", + "send_estimate_successfully": "견적이 성공적으로 전송되었습니다.", + "errors": { + "required": "필드는 필수입니다" + }, + "accepted": "수락 됨", + "rejected": "거부 됨", + "sent": "보냄", + "draft": "초안", + "declined": "거부 됨", + "new_estimate": "새로운 견적", + "add_new_estimate": "새로운 견적 추가", + "update_Estimate": "견적 업데이트", + "edit_estimate": "견적 수정", + "items": "항목", + "Estimate": "견적 | 견적", + "add_new_tax": "새 세금 추가", + "no_estimates": "아직 견적이 없습니다!", + "list_of_estimates": "이 섹션에는 견적 목록이 포함됩니다.", + "mark_as_rejected": "거부 됨으로 표시", + "mark_as_accepted": "수락 됨으로 표시", + "marked_as_accepted_message": "수락 된 것으로 표시된 견적", + "marked_as_rejected_message": "거부 된 것으로 표시된 견적", + "confirm_delete": "이 견적을 복구 할 수 없습니다. | 이 견적을 복구 할 수 없습니다.", + "created_message": "견적이 성공적으로 생성되었습니다.", + "updated_message": "견적이 성공적으로 업데이트되었습니다.", + "deleted_message": "예상치가 성공적으로 삭제되었습니다. | 견적이 성공적으로 삭제되었습니다.", + "something_went_wrong": "뭔가 잘못 됐어", + "item": { + "title": "항목 제목", + "description": "기술", + "quantity": "수량", + "price": "가격", + "discount": "할인", + "total": "합계", + "total_discount": "총 할인", + "sub_total": "소계", + "tax": "세", + "amount": "양", + "select_an_item": "항목을 입력하거나 클릭하여 선택", + "type_item_description": "유형 항목 설명 (선택 사항)" + } + }, + "invoices": { + "title": "송장", + "invoices_list": "송장 목록", + "days": "{days} 일", + "months": "{months} 개월", + "years": "{years} 년", + "all": "모두", + "paid": "유료", + "unpaid": "미지급", + "viewed": "조회", + "overdue": "연체", + "completed": "완료", + "customer": "고객", + "paid_status": "지불 상태", + "ref_no": "참조 번호.", + "number": "번호", + "amount_due": "지불액", + "partially_paid": "부분 지불", + "total": "합계", + "discount": "할인", + "sub_total": "소계", + "invoice": "송장 | 송장", + "invoice_number": "송장 번호", + "ref_number": "참조 번호", + "contact": "접촉", + "add_item": "항목 추가", + "date": "데이트", + "due_date": "마감일", + "status": "상태", + "add_tax": "세금 추가", + "amount": "양", + "action": "동작", + "notes": "노트", + "view": "전망", + "send_invoice": "송장을 보내다", + "resend_invoice": "인보이스 재전송", + "invoice_template": "송장 템플릿", + "template": "주형", + "mark_as_sent": "보낸 것으로 표시", + "confirm_send_invoice": "이 인보이스는 이메일을 통해 고객에게 발송됩니다.", + "invoice_mark_as_sent": "이 인보이스는 보낸 것으로 표시됩니다.", + "confirm_send": "이 인보이스는 이메일을 통해 고객에게 발송됩니다.", + "invoice_date": "송장 날짜", + "record_payment": "기록 지불", + "add_new_invoice": "새 송장 추가", + "update_expense": "비용 업데이트", + "edit_invoice": "송장 편집", + "new_invoice": "새 송장", + "save_invoice": "송장 저장", + "update_invoice": "송장 업데이트", + "add_new_tax": "새 세금 추가", + "no_invoices": "아직 인보이스가 없습니다!", + "list_of_invoices": "이 섹션에는 송장 목록이 포함됩니다.", + "select_invoice": "송장 선택", + "no_matching_invoices": "일치하는 송장이 없습니다!", + "mark_as_sent_successfully": "성공적으로 발송 된 것으로 표시된 송장", + "invoice_sent_successfully": "인보이스가 성공적으로 전송되었습니다.", + "cloned_successfully": "송장이 성공적으로 복제되었습니다.", + "clone_invoice": "송장 복제", + "confirm_clone": "이 송장은 새 송장에 복제됩니다.", + "item": { + "title": "항목 제목", + "description": "기술", + "quantity": "수량", + "price": "가격", + "discount": "할인", + "total": "합계", + "total_discount": "총 할인", + "sub_total": "소계", + "tax": "세", + "amount": "양", + "select_an_item": "항목을 입력하거나 클릭하여 선택", + "type_item_description": "유형 항목 설명 (선택 사항)" + }, + "confirm_delete": "이 인보이스를 복구 할 수 없습니다. | 이러한 인보이스를 복구 할 수 없습니다.", + "created_message": "송장이 성공적으로 생성되었습니다.", + "updated_message": "송장이 성공적으로 업데이트되었습니다.", + "deleted_message": "송장이 성공적으로 삭제되었습니다. | 인보이스가 성공적으로 삭제되었습니다.", + "marked_as_sent_message": "성공적으로 발송 된 것으로 표시된 송장", + "something_went_wrong": "뭔가 잘못 됐어", + "invalid_due_amount_message": "총 송장 금액은이 송장에 대한 총 지불 금액보다 작을 수 없습니다. 계속하려면 인보이스를 업데이트하거나 관련 결제를 삭제하세요." + }, + "payments": { + "title": "지불", + "payments_list": "지불 목록", + "record_payment": "기록 지불", + "customer": "고객", + "date": "데이트", + "amount": "양", + "action": "동작", + "payment_number": "결제 번호", + "payment_mode": "지불 모드", + "invoice": "송장", + "note": "노트", + "add_payment": "지불 추가", + "new_payment": "새로운 지불", + "edit_payment": "결제 수정", + "view_payment": "결제보기", + "add_new_payment": "새 지불 추가", + "send_payment_receipt": "결제 영수증 보내기", + "send_payment": "지불 보내기", + "save_payment": "지불 저장", + "update_payment": "결제 업데이트", + "payment": "지불 | 지불", + "no_payments": "아직 결제가 없습니다!", + "not_selected": "선택되지 않은", + "no_invoice": "송장 없음", + "no_matching_payments": "일치하는 지불이 없습니다!", + "list_of_payments": "이 섹션에는 지불 목록이 포함됩니다.", + "select_payment_mode": "결제 모드 선택", + "confirm_mark_as_sent": "이 견적은 전송 된 것으로 표시됩니다.", + "confirm_send_payment": "이 결제는 이메일을 통해 고객에게 전송됩니다.", + "send_payment_successfully": "지불이 성공적으로 전송되었습니다.", + "something_went_wrong": "뭔가 잘못 됐어", + "confirm_delete": "이 지불금을 복구 할 수 없습니다. | 이 지급금을 복구 할 수 없습니다.", + "created_message": "결제가 성공적으로 생성되었습니다.", + "updated_message": "결제가 성공적으로 업데이트되었습니다.", + "deleted_message": "결제가 성공적으로 삭제되었습니다. | 결제가 성공적으로 삭제되었습니다.", + "invalid_amount_message": "결제 금액이 잘못되었습니다." + }, + "expenses": { + "title": "경비", + "expenses_list": "비용 목록", + "select_a_customer": "고객 선택", + "expense_title": "표제", + "customer": "고객", + "contact": "접촉", + "category": "범주", + "from_date": "시작 날짜", + "to_date": "현재까지", + "expense_date": "데이트", + "description": "기술", + "receipt": "영수증", + "amount": "양", + "action": "동작", + "not_selected": "선택되지 않은", + "note": "노트", + "category_id": "카테고리 ID", + "date": "데이트", + "add_expense": "비용 추가", + "add_new_expense": "신규 비용 추가", + "save_expense": "비용 절감", + "update_expense": "비용 업데이트", + "download_receipt": "영수증 다운로드", + "edit_expense": "비용 편집", + "new_expense": "새로운 비용", + "expense": "비용 | 경비", + "no_expenses": "아직 비용이 없습니다!", + "list_of_expenses": "이 섹션에는 비용 목록이 포함됩니다.", + "confirm_delete": "이 비용을 회수 할 수 없습니다. | 이러한 비용은 회수 할 수 없습니다.", + "created_message": "비용이 성공적으로 생성되었습니다.", + "updated_message": "비용이 성공적으로 업데이트되었습니다.", + "deleted_message": "비용이 성공적으로 삭제되었습니다. | 비용이 성공적으로 삭제되었습니다.", + "categories": { + "categories_list": "카테고리 목록", + "title": "표제", + "name": "이름", + "description": "기술", + "amount": "양", + "actions": "행위", + "add_category": "카테고리 추가", + "new_category": "새 분류", + "category": "카테고리 | 카테고리", + "select_a_category": "카테고리 선택" + } + }, + "login": { + "email": "이메일", + "password": "암호", + "forgot_password": "비밀번호를 잊으 셨나요?", + "or_signIn_with": "또는 다음으로 로그인", + "login": "로그인", + "register": "레지스터", + "reset_password": "암호를 재설정", + "password_reset_successfully": "비밀번호 재설정 성공", + "enter_email": "이메일 입력", + "enter_password": "암호를 입력", + "retype_password": "비밀번호 재 입력" + }, + "users": { + "title": "사용자", + "users_list": "사용자 목록", + "name": "이름", + "description": "기술", + "added_on": "추가됨", + "date_of_creation": "생성 일", + "action": "동작", + "add_user": "사용자 추가", + "save_user": "사용자 저장", + "update_user": "사용자 업데이트", + "user": "사용자 | 사용자", + "add_new_user": "새 사용자 추가", + "new_user": "새로운 사용자", + "edit_user": "사용자 편집", + "no_users": "아직 사용자가 없습니다!", + "list_of_users": "이 섹션에는 사용자 목록이 포함됩니다.", + "email": "이메일", + "phone": "전화", + "password": "암호", + "user_attached_message": "이미 사용중인 항목은 삭제할 수 없습니다.", + "confirm_delete": "이 사용자를 복구 할 수 없습니다. | 이러한 사용자를 복구 할 수 없습니다.", + "created_message": "사용자가 성공적으로 생성되었습니다.", + "updated_message": "사용자가 성공적으로 업데이트되었습니다.", + "deleted_message": "사용자가 성공적으로 삭제되었습니다. | 사용자가 성공적으로 삭제되었습니다." + }, + "reports": { + "title": "보고서", + "from_date": "시작 날짜", + "to_date": "현재까지", + "status": "상태", + "paid": "유료", + "unpaid": "미지급", + "download_pdf": "PDF 다운로드", + "view_pdf": "PDF보기", + "update_report": "보고서 업데이트", + "report": "신고 | 보고서", + "profit_loss": { + "profit_loss": "이익", + "to_date": "현재까지", + "from_date": "시작 날짜", + "date_range": "기간 선택" + }, + "sales": { + "sales": "매상", + "date_range": "기간 선택", + "to_date": "현재까지", + "from_date": "시작 날짜", + "report_type": "보고서 유형" + }, + "taxes": { + "taxes": "구실", + "to_date": "현재까지", + "from_date": "시작 날짜", + "date_range": "기간 선택" + }, + "errors": { + "required": "필드는 필수입니다" + }, + "invoices": { + "invoice": "송장", + "invoice_date": "송장 날짜", + "due_date": "마감일", + "amount": "양", + "contact_name": "담당자 이름", + "status": "상태" + }, + "estimates": { + "estimate": "견적", + "estimate_date": "예상 날짜", + "due_date": "마감일", + "estimate_number": "견적 번호", + "ref_number": "참조 번호", + "amount": "양", + "contact_name": "담당자 이름", + "status": "상태" + }, + "expenses": { + "expenses": "경비", + "category": "범주", + "date": "데이트", + "amount": "양", + "to_date": "현재까지", + "from_date": "시작 날짜", + "date_range": "기간 선택" + } + }, + "settings": { + "menu_title": { + "account_settings": "계정 설정", + "company_information": "회사 정보", + "customization": "커스터마이징", + "preferences": "환경 설정", + "notifications": "알림", + "tax_types": "세금 유형", + "expense_category": "비용 범주", + "update_app": "앱 업데이트", + "backup": "지원", + "file_disk": "파일 디스크", + "custom_fields": "사용자 정의 필드", + "payment_modes": "지불 모드", + "notes": "노트" + }, + "title": "설정", + "setting": "설정 | 설정", + "general": "일반", + "language": "언어", + "primary_currency": "기본 통화", + "timezone": "시간대", + "date_format": "날짜 형식", + "currencies": { + "title": "통화", + "currency": "통화 | 통화", + "currencies_list": "통화 목록", + "select_currency": "통화 선택", + "name": "이름", + "code": "암호", + "symbol": "상징", + "precision": "정도", + "thousand_separator": "천 구분자", + "decimal_separator": "소수점 구분 기호", + "position": "위치", + "position_of_symbol": "기호 위치", + "right": "권리", + "left": "왼쪽", + "action": "동작", + "add_currency": "통화 추가" + }, + "mail": { + "host": "메일 호스트", + "port": "메일 포트", + "driver": "메일 드라이버", + "secret": "비밀", + "mailgun_secret": "Mailgun 비밀", + "mailgun_domain": "도메인", + "mailgun_endpoint": "Mailgun 엔드 포인트", + "ses_secret": "SES 비밀", + "ses_key": "SES 키", + "password": "메일 비밀번호", + "username": "메일 사용자 이름", + "mail_config": "메일 구성", + "from_name": "메일 이름에서", + "from_mail": "메일 주소에서", + "encryption": "메일 암호화", + "mail_config_desc": "다음은 앱에서 이메일을 보내기위한 이메일 드라이버 구성 양식입니다. Sendgrid, SES 등과 같은 타사 공급자를 구성 할 수도 있습니다." + }, + "pdf": { + "title": "PDF 설정", + "footer_text": "바닥 글 텍스트", + "pdf_layout": "PDF 레이아웃" + }, + "company_info": { + "company_info": "회사 정보", + "company_name": "회사 이름", + "company_logo": "회사 로고", + "section_description": "Crater에서 생성 한 송장, 견적 및 기타 문서에 표시 될 회사에 대한 정보.", + "phone": "전화", + "country": "국가", + "state": "상태", + "city": "시티", + "address": "주소", + "zip": "지퍼", + "save": "저장", + "updated_message": "회사 정보가 성공적으로 업데이트되었습니다." + }, + "custom_fields": { + "title": "사용자 정의 필드", + "section_description": "송장, 견적 사용자 지정", + "add_custom_field": "사용자 정의 필드 추가", + "edit_custom_field": "사용자 정의 필드 편집", + "field_name": "분야 명", + "label": "상표", + "type": "유형", + "name": "이름", + "required": "필수", + "placeholder": "자리 표시 자", + "help_text": "도움말 텍스트", + "default_value": "기본값", + "prefix": "접두사", + "starting_number": "시작 번호", + "model": "모델", + "help_text_description": "사용자가이 사용자 정의 필드의 목적을 이해하는 데 도움이되는 텍스트를 입력하십시오.", + "suffix": "접미사", + "yes": "예", + "no": "아니", + "order": "주문", + "custom_field_confirm_delete": "이 사용자 정의 필드를 복구 할 수 없습니다.", + "already_in_use": "맞춤 입력란이 이미 사용 중입니다.", + "deleted_message": "맞춤 입력란이 성공적으로 삭제되었습니다.", + "options": "옵션", + "add_option": "옵션 추가", + "add_another_option": "다른 옵션 추가", + "sort_in_alphabetical_order": "알파벳순으로 정렬", + "add_options_in_bulk": "일괄 옵션 추가", + "use_predefined_options": "미리 정의 된 옵션 사용", + "select_custom_date": "맞춤 날짜 선택", + "select_relative_date": "상대 날짜 선택", + "ticked_by_default": "기본적으로 선택됨", + "updated_message": "맞춤 입력란이 성공적으로 업데이트되었습니다.", + "added_message": "맞춤 입력란이 성공적으로 추가되었습니다." + }, + "customization": { + "customization": "맞춤화", + "save": "저장", + "addresses": { + "title": "구애", + "section_description": "고객 청구 주소 및 고객 배송 주소 형식을 설정할 수 있습니다 (PDF로만 표시됨).", + "customer_billing_address": "고객 청구 주소", + "customer_shipping_address": "고객 배송 주소", + "company_address": "회사 주소", + "insert_fields": "필드 삽입", + "contact": "접촉", + "address": "주소", + "display_name": "이름 표시하기", + "primary_contact_name": "기본 연락처 이름", + "email": "이메일", + "website": "웹 사이트", + "name": "이름", + "country": "국가", + "state": "상태", + "city": "시티", + "company_name": "회사 이름", + "address_street_1": "주소 거리 1", + "address_street_2": "주소 Street 2", + "phone": "전화", + "zip_code": "우편 번호", + "address_setting_updated": "주소 설정이 성공적으로 업데이트되었습니다." + }, + "updated_message": "회사 정보가 성공적으로 업데이트되었습니다.", + "invoices": { + "title": "송장", + "notes": "노트", + "invoice_prefix": "송장 접두사", + "default_invoice_email_body": "기본 송장 이메일 본문", + "invoice_settings": "송장 설정", + "autogenerate_invoice_number": "송장 번호 자동 생성", + "autogenerate_invoice_number_desc": "새 인보이스를 생성 할 때마다 인보이스 번호를 자동 생성하지 않으려면이 기능을 비활성화하십시오.", + "invoice_email_attachment": "송장을 첨부 파일로 보내기", + "invoice_email_attachment_setting_description": "인보이스를 이메일 첨부 파일로 보내려면이 옵션을 활성화하십시오. 이메일의 '인보이스보기'버튼이 활성화되면 더 이상 표시되지 않습니다.", + "enter_invoice_prefix": "송장 접두사 입력", + "terms_and_conditions": "이용 약관", + "company_address_format": "회사 주소 형식", + "shipping_address_format": "배송 주소 형식", + "billing_address_format": "청구 지 주소 형식", + "invoice_settings_updated": "인보이스 설정이 성공적으로 업데이트되었습니다." + }, + "estimates": { + "title": "견적", + "estimate_prefix": "접두사 추정", + "default_estimate_email_body": "기본 예상 이메일 본문", + "estimate_settings": "예상 설정", + "autogenerate_estimate_number": "견적 번호 자동 생성", + "estimate_setting_description": "새 견적을 생성 할 때마다 견적 번호를 자동 생성하지 않으려면이 기능을 비활성화하십시오.", + "estimate_email_attachment": "견적을 첨부 파일로 보내기", + "estimate_email_attachment_setting_description": "견적을 이메일 첨부 파일로 보내려면이 옵션을 활성화하십시오. 이메일의 '예상보기'버튼이 활성화되면 더 이상 표시되지 않습니다.", + "enter_estimate_prefix": "견적 접두사 입력", + "estimate_setting_updated": "예상 설정이 성공적으로 업데이트되었습니다.", + "company_address_format": "회사 주소 형식", + "billing_address_format": "청구 지 주소 형식", + "shipping_address_format": "배송 주소 형식" + }, + "payments": { + "title": "지불", + "description": "지불을위한 거래 방식", + "payment_prefix": "지불 접두사", + "default_payment_email_body": "기본 결제 이메일 본문", + "payment_settings": "결제 설정", + "autogenerate_payment_number": "결제 번호 자동 생성", + "payment_setting_description": "새 결제를 생성 할 때마다 결제 번호를 자동 생성하지 않으려면이 기능을 비활성화하십시오.", + "payment_email_attachment": "첨부 파일로 지불 보내기", + "payment_email_attachment_setting_description": "결제 영수증을 이메일 첨부 파일로 보내려면이 옵션을 활성화하십시오. 이메일의 '결제보기'버튼이 활성화되면 더 이상 표시되지 않습니다.", + "enter_payment_prefix": "지불 접두사 입력", + "payment_setting_updated": "결제 설정이 성공적으로 업데이트되었습니다.", + "payment_modes": "지불 모드", + "add_payment_mode": "결제 모드 추가", + "edit_payment_mode": "결제 모드 수정", + "mode_name": "모드 이름", + "payment_mode_added": "결제 모드 추가", + "payment_mode_updated": "결제 모드 업데이트", + "payment_mode_confirm_delete": "이 결제 모드를 복구 할 수 없습니다.", + "already_in_use": "결제 모드가 이미 사용 중입니다.", + "deleted_message": "결제 모드가 성공적으로 삭제되었습니다.", + "company_address_format": "회사 주소 형식", + "from_customer_address_format": "고객 주소 형식에서" + }, + "items": { + "title": "아이템", + "units": "단위", + "add_item_unit": "항목 단위 추가", + "edit_item_unit": "항목 단위 편집", + "unit_name": "단위 이름", + "item_unit_added": "항목 단위 추가됨", + "item_unit_updated": "항목 단위 업데이트 됨", + "item_unit_confirm_delete": "이 항목 단위를 복구 할 수 없습니다.", + "already_in_use": "항목 단위가 이미 사용 중입니다.", + "deleted_message": "항목 단위가 성공적으로 삭제되었습니다." + }, + "notes": { + "title": "노트", + "description": "메모를 작성하고 송장, 견적서에 재사용하여 시간 절약", + "notes": "노트", + "type": "유형", + "add_note": "메모를 추가", + "add_new_note": "새 메모 추가", + "name": "이름", + "edit_note": "메모 수정", + "note_added": "메모가 성공적으로 추가되었습니다.", + "note_updated": "참고 성공적으로 업데이트되었습니다.", + "note_confirm_delete": "이 메모를 복구 할 수 없습니다.", + "already_in_use": "메모가 이미 사용 중입니다.", + "deleted_message": "메모가 성공적으로 삭제되었습니다." + } + }, + "account_settings": { + "profile_picture": "프로필 사진", + "name": "이름", + "email": "이메일", + "password": "암호", + "confirm_password": "비밀번호 확인", + "account_settings": "계정 설정", + "save": "저장", + "section_description": "이름, 이메일을 업데이트 할 수 있습니다.", + "updated_message": "계정 설정이 성공적으로 업데이트되었습니다." + }, + "user_profile": { + "name": "이름", + "email": "이메일", + "password": "암호", + "confirm_password": "비밀번호 확인" + }, + "notification": { + "title": "공고", + "email": "알림 보내기", + "description": "변경 사항이있을 때 어떤 이메일 알림을 받으시겠습니까?", + "invoice_viewed": "송장 조회", + "invoice_viewed_desc": "고객이 분화구 대시 보드를 통해 전송 된 송장을 볼 때.", + "estimate_viewed": "본 견적", + "estimate_viewed_desc": "고객이 분화구 대시 보드를 통해 전송 된 견적을 볼 때.", + "save": "저장", + "email_save_message": "이메일이 성공적으로 저장되었습니다.", + "please_enter_email": "이메일을 입력하십시오" + }, + "tax_types": { + "title": "세금 유형", + "add_tax": "세금 추가", + "edit_tax": "세금 수정", + "description": "원하는대로 세금을 추가하거나 제거 할 수 있습니다. Crater는 송장뿐만 아니라 개별 품목에 대한 세금을 지원합니다.", + "add_new_tax": "새 세금 추가", + "tax_settings": "세금 설정", + "tax_per_item": "품목 당 세금", + "tax_name": "세금 이름", + "compound_tax": "복합 세", + "percent": "퍼센트", + "action": "동작", + "tax_setting_description": "개별 송장 항목에 세금을 추가하려면이 옵션을 활성화하십시오. 기본적으로 세금은 송장에 직접 추가됩니다.", + "created_message": "세금 유형이 성공적으로 생성되었습니다.", + "updated_message": "세금 유형이 성공적으로 업데이트되었습니다.", + "deleted_message": "세금 유형이 성공적으로 삭제되었습니다.", + "confirm_delete": "이 세금 유형을 복구 할 수 없습니다.", + "already_in_use": "세금이 이미 사용 중입니다." + }, + "expense_category": { + "title": "비용 범주", + "action": "동작", + "description": "비용 항목을 추가하려면 카테고리가 필요합니다. 기본 설정에 따라 이러한 범주를 추가하거나 제거 할 수 있습니다.", + "add_new_category": "새 카테고리 추가", + "add_category": "카테고리 추가", + "edit_category": "카테고리 수정", + "category_name": "카테고리 이름", + "category_description": "기술", + "created_message": "비용 범주가 성공적으로 생성되었습니다.", + "deleted_message": "비용 범주가 성공적으로 삭제되었습니다.", + "updated_message": "비용 범주가 성공적으로 업데이트되었습니다.", + "confirm_delete": "이 비용 범주를 복구 할 수 없습니다.", + "already_in_use": "카테고리가 이미 사용 중입니다." + }, + "preferences": { + "currency": "통화", + "default_language": "기본 언어", + "time_zone": "시간대", + "fiscal_year": "회계 연도", + "date_format": "날짜 형식", + "discount_setting": "할인 설정", + "discount_per_item": "품목별 할인", + "discount_setting_description": "개별 송장 항목에 할인을 추가하려면이 옵션을 활성화하십시오. 기본적으로 할인은 송장에 직접 추가됩니다.", + "save": "저장", + "preference": "선호도 | 환경 설정", + "general_settings": "시스템의 기본 기본 설정입니다.", + "updated_message": "환경 설정이 성공적으로 업데이트되었습니다.", + "select_language": "언어 선택", + "select_time_zone": "시간대 선택", + "select_date_format": "날짜 형식 선택", + "select_financial_year": "회계 연도 선택" + }, + "update_app": { + "title": "앱 업데이트", + "description": "아래 버튼을 클릭하여 새로운 업데이트를 확인하여 Crater를 쉽게 업데이트 할 수 있습니다.", + "check_update": "업데이트 확인", + "avail_update": "새로운 업데이트 사용 가능", + "next_version": "다음 버전", + "requirements": "요구 사항", + "update": "지금 업데이트", + "update_progress": "업데이트 진행 중 ...", + "progress_text": "몇 분 정도 걸립니다. 업데이트가 완료되기 전에 화면을 새로 고치거나 창을 닫지 마십시오.", + "update_success": "앱이 업데이트되었습니다! 브라우저 창이 자동으로 다시로드되는 동안 잠시 기다려주십시오.", + "latest_message": "사용 가능한 업데이트가 없습니다! 최신 버전을 사용 중입니다.", + "current_version": "현재 버전", + "download_zip_file": "ZIP 파일 다운로드", + "unzipping_package": "패키지 압축 해제", + "copying_files": "파일 복사", + "deleting_files": "사용하지 않는 파일 삭제", + "running_migrations": "마이그레이션 실행", + "finishing_update": "업데이트 완료", + "update_failed": "업데이트가 실패", + "update_failed_text": "죄송합니다! 업데이트 실패 : {step} 단계" + }, + "backup": { + "title": "백업 | 백업", + "description": "백업은 데이터베이스 덤프와 함께 지정한 디렉토리의 모든 파일을 포함하는 zip 파일입니다.", + "new_backup": "새 백업 추가", + "create_backup": "백업 생성", + "select_backup_type": "백업 유형 선택", + "backup_confirm_delete": "이 백업을 복구 할 수 없습니다.", + "path": "통로", + "new_disk": "새 디스크", + "created_at": "에 생성", + "size": "크기", + "dropbox": "드롭 박스", + "local": "현지", + "healthy": "건강한", + "amount_of_backups": "백업 양", + "newest_backups": "최신 백업", + "used_storage": "중고 저장", + "select_disk": "디스크 선택", + "action": "동작", + "deleted_message": "백업이 성공적으로 삭제되었습니다.", + "created_message": "백업이 성공적으로 생성되었습니다.", + "invalid_disk_credentials": "선택한 디스크의 잘못된 자격 증명" + }, + "disk": { + "title": "파일 디스크 | 파일 디스크", + "description": "기본적으로 Crater는 백업, 아바타 및 기타 이미지 파일을 저장하기 위해 로컬 디스크를 사용합니다. 선호도에 따라 DigitalOcean, S3 및 Dropbox와 같은 둘 이상의 디스크 드라이버를 구성 할 수 있습니다.", + "created_at": "에 생성", + "dropbox": "드롭 박스", + "name": "이름", + "driver": "운전사", + "disk_type": "유형", + "disk_name": "디스크 이름", + "new_disk": "새 디스크 추가", + "filesystem_driver": "파일 시스템 드라이버", + "local_driver": "로컬 드라이버", + "local_root": "로컬 루트", + "public_driver": "공공 운전자", + "public_root": "공개 루트", + "public_url": "공개 URL", + "public_visibility": "공개 가시성", + "media_driver": "미디어 드라이버", + "media_root": "미디어 루트", + "aws_driver": "AWS 드라이버", + "aws_key": "AWS 키", + "aws_secret": "AWS 비밀", + "aws_region": "AWS 리전", + "aws_bucket": "AWS 버킷", + "aws_root": "AWS 루트", + "do_spaces_type": "Do Spaces 유형", + "do_spaces_key": "Do Spaces 키", + "do_spaces_secret": "스페이스 시크릿", + "do_spaces_region": "Do Spaces 영역", + "do_spaces_bucket": "Do Spaces Bucket", + "do_spaces_endpoint": "Do Spaces 끝점", + "do_spaces_root": "공간 루트 수행", + "dropbox_type": "Dropbox 유형", + "dropbox_token": "Dropbox 토큰", + "dropbox_key": "Dropbox 키", + "dropbox_secret": "Dropbox 비밀", + "dropbox_app": "Dropbox 앱", + "dropbox_root": "Dropbox 루트", + "default_driver": "기본 드라이버", + "is_default": "기본값입니다.", + "set_default_disk": "기본 디스크 설정", + "set_default_disk_confirm": "이 디스크는 기본값으로 설정되며 모든 새 PDF가이 디스크에 저장됩니다.", + "success_set_default_disk": "디스크가 기본값으로 설정되었습니다.", + "save_pdf_to_disk": "PDF를 디스크에 저장", + "disk_setting_description": "각 송장의 사본을 저장하려면 이것을 활성화하십시오.", + "select_disk": "디스크 선택", + "disk_settings": "디스크 설정", + "confirm_delete": "기존 파일", + "action": "동작", + "edit_file_disk": "파일 디스크 편집", + "success_create": "디스크가 성공적으로 추가되었습니다.", + "success_update": "디스크가 성공적으로 업데이트되었습니다.", + "error": "디스크 추가 실패", + "deleted_message": "파일 디스크가 성공적으로 삭제되었습니다.", + "disk_variables_save_successfully": "디스크가 성공적으로 구성되었습니다.", + "disk_variables_save_error": "디스크 구성에 실패했습니다.", + "invalid_disk_credentials": "선택한 디스크의 잘못된 자격 증명" + } + }, + "wizard": { + "account_info": "계정 정보", + "account_info_desc": "아래 세부 정보는 기본 관리자 계정을 만드는 데 사용됩니다. 또한 로그인 후 언제든지 세부 정보를 변경할 수 있습니다.", + "name": "이름", + "email": "이메일", + "password": "암호", + "confirm_password": "비밀번호 확인", + "save_cont": "저장", + "company_info": "회사 정보", + "company_info_desc": "이 정보는 송장에 표시됩니다. 나중에 설정 페이지에서 수정할 수 있습니다.", + "company_name": "회사 이름", + "company_logo": "회사 로고", + "logo_preview": "로고 미리보기", + "preferences": "환경 설정", + "preferences_desc": "시스템의 기본 기본 설정입니다.", + "country": "국가", + "state": "상태", + "city": "시티", + "address": "주소", + "street": "Street1 | Street2", + "phone": "전화", + "zip_code": "우편 번호", + "go_back": "돌아 가기", + "currency": "통화", + "language": "언어", + "time_zone": "시간대", + "fiscal_year": "회계 연도", + "date_format": "날짜 형식", + "from_address": "주소에서", + "username": "사용자 이름", + "next": "다음", + "continue": "계속하다", + "skip": "건너 뛰기", + "database": { + "database": "사이트 URL", + "connection": "데이터베이스 연결", + "host": "데이터베이스 호스트", + "port": "데이터베이스 포트", + "password": "데이터베이스 비밀번호", + "app_url": "앱 URL", + "app_domain": "앱 도메인", + "username": "데이터베이스 사용자 이름", + "db_name": "데이터베이스 이름", + "db_path": "데이터베이스 경로", + "desc": "서버에 데이터베이스를 만들고 아래 양식을 사용하여 자격 증명을 설정합니다." + }, + "permissions": { + "permissions": "권한", + "permission_confirm_title": "너 정말 계속하고 싶니?", + "permission_confirm_desc": "폴더 권한 확인 실패", + "permission_desc": "다음은 앱이 작동하는 데 필요한 폴더 권한 목록입니다. 권한 확인에 실패하면 폴더 권한을 업데이트하십시오." + }, + "mail": { + "host": "메일 호스트", + "port": "메일 포트", + "driver": "메일 드라이버", + "secret": "비밀", + "mailgun_secret": "Mailgun 비밀", + "mailgun_domain": "도메인", + "mailgun_endpoint": "Mailgun 엔드 포인트", + "ses_secret": "SES 비밀", + "ses_key": "SES 키", + "password": "메일 비밀번호", + "username": "메일 사용자 이름", + "mail_config": "메일 구성", + "from_name": "메일 이름에서", + "from_mail": "메일 주소에서", + "encryption": "메일 암호화", + "mail_config_desc": "다음은 앱에서 이메일을 보내기위한 이메일 드라이버 구성 양식입니다. Sendgrid, SES 등과 같은 타사 공급자를 구성 할 수도 있습니다." + }, + "req": { + "system_req": "시스템 요구 사항", + "php_req_version": "PHP (버전 {version} 필요)", + "check_req": "요구 사항 확인", + "system_req_desc": "크레이터에는 몇 가지 서버 요구 사항이 있습니다. 서버에 필요한 PHP 버전과 아래에 언급 된 모든 확장이 있는지 확인하십시오." + }, + "errors": { + "migrate_failed": "마이그레이션 실패", + "database_variables_save_error": ".env 파일에 구성을 쓸 수 없습니다. 파일 권한을 확인하십시오", + "mail_variables_save_error": "이메일 구성에 실패했습니다.", + "connection_failed": "데이터베이스 연결 실패", + "database_should_be_empty": "데이터베이스는 비어 있어야합니다." + }, + "success": { + "mail_variables_save_successfully": "이메일이 성공적으로 구성되었습니다.", + "database_variables_save_successfully": "데이터베이스가 성공적으로 구성되었습니다." + } + }, + "validation": { + "invalid_phone": "유효하지 않은 전화 번호", + "invalid_url": "잘못된 URL (예 : http://www.craterapp.com)", + "invalid_domain_url": "잘못된 URL (예 : craterapp.com)", + "required": "필드는 필수입니다", + "email_incorrect": "잘못된 이메일.", + "email_already_taken": "이메일이 이미 사용되었습니다.", + "email_does_not_exist": "주어진 이메일을 가진 사용자가 존재하지 않습니다", + "item_unit_already_taken": "이 항목 단위 이름은 이미 사용되었습니다.", + "payment_mode_already_taken": "이 결제 모드 이름은 이미 사용되었습니다.", + "send_reset_link": "재설정 링크 보내기", + "not_yet": "아직? 다시 보내줘", + "password_min_length": "비밀번호는 {count}자를 포함해야합니다.", + "name_min_length": "이름은 {count} 자 이상이어야합니다.", + "enter_valid_tax_rate": "유효한 세율을 입력하세요.", + "numbers_only": "숫자 만.", + "characters_only": "문자 만.", + "password_incorrect": "비밀번호는 동일해야합니다.", + "password_length": "비밀번호는 {count} 자 여야합니다.", + "qty_must_greater_than_zero": "수량은 0보다 커야합니다.", + "price_greater_than_zero": "가격은 0보다 커야합니다.", + "payment_greater_than_zero": "결제 금액은 0보다 커야합니다.", + "payment_greater_than_due_amount": "입력 된 결제 금액이이 송장의 만기 금액을 초과합니다.", + "quantity_maxlength": "수량은 20 자리를 초과 할 수 없습니다.", + "price_maxlength": "가격은 20 자리를 초과 할 수 없습니다.", + "price_minvalue": "가격은 0보다 커야합니다.", + "amount_maxlength": "금액은 20 자리를 초과 할 수 없습니다.", + "amount_minvalue": "금액은 0보다 커야합니다.", + "description_maxlength": "설명은 65,000자를 초과 할 수 없습니다.", + "subject_maxlength": "제목은 100 자 이하 여야합니다.", + "message_maxlength": "메시지는 255자를 초과 할 수 없습니다.", + "maximum_options_error": "최대 {max} 개의 옵션이 선택되었습니다. 먼저 선택한 옵션을 제거하여 다른 옵션을 선택하십시오.", + "notes_maxlength": "메모는 65,000자를 초과 할 수 없습니다.", + "address_maxlength": "주소는 255자를 초과 할 수 없습니다.", + "ref_number_maxlength": "참조 번호는 255자를 초과 할 수 없습니다.", + "prefix_maxlength": "접두사는 5 자 이하 여야합니다.", + "something_went_wrong": "뭔가 잘못 됐어" + }, + "pdf_estimate_label": "견적", + "pdf_estimate_number": "견적 번호", + "pdf_estimate_date": "예상 날짜", + "pdf_estimate_expire_date": "만료일", + "pdf_invoice_label": "송장", + "pdf_invoice_number": "송장 번호", + "pdf_invoice_date": "송장 날짜", + "pdf_invoice_due_date": "마감일", + "pdf_notes": "노트", + "pdf_items_label": "아이템", + "pdf_quantity_label": "수량", + "pdf_price_label": "가격", + "pdf_discount_label": "할인", + "pdf_amount_label": "양", + "pdf_subtotal": "소계", + "pdf_total": "합계", + "pdf_payment_label": "지불", + "pdf_payment_receipt_label": "영수증", + "pdf_payment_date": "결제일", + "pdf_payment_number": "결제 번호", + "pdf_payment_mode": "지불 모드", + "pdf_payment_amount_received_label": "받은 금액", + "pdf_expense_report_label": "비용 보고서", + "pdf_total_expenses_label": "총 비용", + "pdf_profit_loss_label": "이익", + "pdf_sales_customers_label": "판매 고객 보고서", + "pdf_sales_items_label": "판매 품목 보고서", + "pdf_tax_summery_label": "세금 요약 보고서", + "pdf_income_label": "수입", + "pdf_net_profit_label": "순이익", + "pdf_customer_sales_report": "판매 보고서 : 고객 별", + "pdf_total_sales_label": "총 매출", + "pdf_item_sales_label": "판매 보고서 : 품목별", + "pdf_tax_report_label": "세금 보고서", + "pdf_total_tax_label": "총 세금", + "pdf_tax_types_label": "세금 유형", + "pdf_expenses_label": "경비", + "pdf_bill_to": "청구서,", + "pdf_ship_to": "배송지,", + "pdf_received_from": "받은 사람 :", + "pdf_tax_label": "세" +} diff --git a/resources/scripts/locales/locales.js b/resources/scripts/locales/locales.js new file mode 100644 index 000000000..18a1ca8f6 --- /dev/null +++ b/resources/scripts/locales/locales.js @@ -0,0 +1,35 @@ +import en from './en.json' +import fr from './fr.json' +import es from './es.json' +import ar from './ar.json' +import de from './de.json' +import ja from './ja.json' +import pl from './pl.json' +import pt_BR from './pt-br.json' +import it from './it.json' +import sr from './sr.json' +import nl from './nl.json' +import ko from './ko.json' +import lv from './lv.json' +import sv from './sv.json' +import sk from './sk.json' +import vi from './vi.json' + +export default { + en, + fr, + es, + ar, + de, + ja, + pt_BR, + it, + sr, + nl, + ko, + lv, + sv, + sk, + vi, + pl +} diff --git a/resources/assets/js/plugins/lv.json b/resources/scripts/locales/lv.json similarity index 92% rename from resources/assets/js/plugins/lv.json rename to resources/scripts/locales/lv.json index 558cddcd3..f670915b4 100644 --- a/resources/assets/js/plugins/lv.json +++ b/resources/scripts/locales/lv.json @@ -63,8 +63,6 @@ "choose_template": "Izvēlaties sagatavi", "choose": "Izvēlies", "remove": "Dzēst", - "powered_by": "Powered by", - "bytefury": "Bytefury", "select_a_status": "Izvēlieties statusu", "select_a_tax": "Izvēlēties nodokli", "search": "Meklēt", @@ -86,8 +84,7 @@ "retry": "Atkārtot", "choose_note": "Izvēlieties piezīmi", "no_note_found": "Piezīmes nav atrastas", - "insert_note": "Ievietot piezīmi", - "copied_pdf_url_clipboard": "Copied PDF url to clipboard!" + "insert_note": "Ievietot piezīmi" }, "dashboard": { "select_year": "Izvēlieties gadu", @@ -104,9 +101,6 @@ "net_income": "Peļņa", "year": "Izvēlieties gadu" }, - "weekly_invoices": { - "title": "Nedēļas rēķini" - }, "monthly_chart": { "title": "Pārdotais un Izdevumi" }, @@ -295,7 +289,6 @@ "created_message": "Aprēķins izveidots veiksmīgi", "updated_message": "Aprēķins atjaunināts veiksmīgi", "deleted_message": "Aprēķins veiksmīgi izdzēsts | Aprēķini veiksmīgi izdzēsti", - "user_email_does_not_exist": "Lietotāja e-pasts neeksistē", "something_went_wrong": "kaut kas nogāja greizi", "item": { "title": "Preces nosaukums", @@ -368,7 +361,7 @@ "select_invoice": "Izvēlaties rēķinu", "no_matching_invoices": "Netika atrasts neviens rēķins!", "mark_as_sent_successfully": "Rēķins atzīmēts kā veiksmīgi nosūtīts", - "send_invoice_successfully": "Rēķins ir veiksmīgi nosūtīts", + "invoice_sent_successfully": "Rēķins ir veiksmīgi nosūtīts", "cloned_successfully": "Rēķins ir veiksmīgi nokopēts", "clone_invoice": "Kopēt rēķinu", "confirm_clone": "Šis rēķins tiks nokopēts kā jauns rēķins", @@ -386,39 +379,14 @@ "select_an_item": "Rakstīt vai spiest, lai izvēlētos", "type_item_description": "Ievadiet preces/pakalpojuma aprakstu (nav obligāti)" }, - "payment_attached_message": "Vienam no atzīmētajiem rēķiniem jau ir pievienots maksājums. Pārliecinieties, ka pievienoti maksājumi ir izdzēsti", "confirm_delete": "Jūs nevarēsiet atgūt šo rēķinu | Jūs nevarēsiet atgūt šos rēķinus", "created_message": "Rēķins izveidots veiksmīgi", "updated_message": "Rēķins ir veiksmīgi atjaunināts", "deleted_message": "Rēķins veiksmīgi izdzēsts | Rēķini veiksmīgi izdzēsti", "marked_as_sent_message": "Rēķins atzīmēts kā veiksmīgi nosūtīts", - "user_email_does_not_exist": "Lietotāja e-pasts neeksistē", "something_went_wrong": "kaut kas nogāja greizi", "invalid_due_amount_message": "Rēķina kopējā summa nevar būt mazāka par kopējo apmaksāto summu. Lūdzu atjauniniet rēķinu vai dzēsiet piesaistītos maksājumus, lai turpinātu." }, - "credit_notes": { - "title": "Credit Notes", - "credit_notes_list": "Credit Notes List", - "credit_notes": "Credit Notes", - "contact": "Kontakti", - "date": "Datums", - "amount": "Summa", - "action": "Darbība", - "credit_number": "Credit Number", - "notes": "Piezīmes", - "confirm_delete": "Do you want to delete this credit note?", - "item": { - "title": "Vienuma nosaukums", - "description": "Apraksts", - "quantity": "Daudzums", - "price": "Cena", - "discount": "Atlaide", - "total": "Kopā", - "total_discount": "Kopējā atlaide", - "sub_total": "Starpsumma", - "tax": "Nodoklis" - } - }, "payments": { "title": "Maksājumi", "payments_list": "Maksājumu saraksts", @@ -450,7 +418,6 @@ "confirm_mark_as_sent": "Aprēķins tiks atzīmēts kā nosūtīts", "confirm_send_payment": "Šis maksājums tiks nosūtīts klientam e-pastā", "send_payment_successfully": "Maksājums veiksmīgi nosūtīts", - "user_email_does_not_exist": "Lietotāja e-pasts neeksistē", "something_went_wrong": "kaut kas nogāja greizi", "confirm_delete": "Jūs nevarēsiet atgūt šo maksājumu | Jūs nevarēsiet atgūt šos maksājumus", "created_message": "Maksājums veiksmīgi izveidots", @@ -515,8 +482,7 @@ "password_reset_successfully": "Parole atjaunota veiksmīgi", "enter_email": "Ievadiet e-pastu", "enter_password": "Ievadiet paroli", - "retype_password": "Atkārtoti ievadiet paroli", - "login_placeholder": "epasts@piemers.lv" + "retype_password": "Atkārtoti ievadiet paroli" }, "users": { "title": "Lietotāji", @@ -751,30 +717,24 @@ "title": "Rēķini", "notes": "Piezīmes", "invoice_prefix": "Rēķina prefikss", - "invoice_number_length": "Invoice number length", "default_invoice_email_body": "Default Invoice Email Body", "invoice_settings": "Invoice Settings", "autogenerate_invoice_number": "Automātiski ģenerēt rēķina numuru", - "invoice_setting_description": "Atspējojiet, ja nevēlaties automātiski ģenerēt rēķinu numurus katru reizi, kad izveidojat jaunu rēķinu.", - "invoice_email_attachment": "Send invoices as attachments", - "invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.", + "autogenerate_invoice_number_desc": "Atspējojiet, ja nevēlaties automātiski ģenerēt rēķinu numurus katru reizi, kad izveidojat jaunu rēķinu.", "enter_invoice_prefix": "Ievadiet rēķina prefiksu", "terms_and_conditions": "Lietošanas noteikumi", "company_address_format": "Uzņēmuma adreses formāts", "shipping_address_format": "Piegādes adreses formāts", "billing_address_format": "Maksātāja / Uzņēmuma adreses formāts", - "invoice_setting_updated": "Rēķina iestatījumi ir veiksmīgi atjaunināti" + "invoice_settings_updated": "Rēķina iestatījumi ir veiksmīgi atjaunināti" }, "estimates": { "title": "Aprēķini", "estimate_prefix": "Aprēķinu prefikss", - "estimate_number_length": "Estimate number length", "default_estimate_email_body": "Noklusējamais Aprēķina e-pasta saturs", "estimate_settings": "Aprēķinu iestatījumi", "autogenerate_estimate_number": "Automātiski ģenerēt Aprēķina numuru", "estimate_setting_description": "Atspējojiet, ja nevēlaties automātiski ģenerēt Aprēķinu numurus katru reizi, kad izveidojat jaunu Aprēķinu.", - "estimate_email_attachment": "Send estimates as attachments", - "estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.", "enter_estimate_prefix": "Ievadiet Aprēķina prefiksu", "estimate_setting_updated": "Aprēķina iestatījumi ir veiksmīgi atjaunināti", "company_address_format": "Uzņēmuma adreses formāts", @@ -785,13 +745,10 @@ "title": "Maksājumi", "description": "Pārskaitījumu veidi, maksājumiem", "payment_prefix": "Maksājuma prefikss", - "payment_number_length": "Payment number lenght", "default_payment_email_body": "Noklusējamais Maksājuma e-pasta saturs", "payment_settings": "Maksājumu iestatījumi", "autogenerate_payment_number": "Automātiski ģenerēt Maksājuma numuru", "payment_setting_description": "Atspējojiet, ja nevēlaties automātiski ģenerēt Maksājuma numurus katru reizi, kad izveidojat jaunu Maksājumu.", - "payment_email_attachment": "Send payments as attachments", - "payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.", "enter_payment_prefix": "Ievadiet Maksājuma prefiksu", "payment_setting_updated": "Maksājumu iestatījumi ir veiksmīgi atjaunināti", "payment_modes": "Apmaksas veidi", @@ -931,7 +888,6 @@ "download_zip_file": "Lejupielādēt ZIP failu", "unzipping_package": "Atarhivē Zip failu", "copying_files": "Notiek failu kopēšana", - "deleting_files": "Deleting Unused files", "running_migrations": "Notiek migrācijas", "finishing_update": "Pabeidz atjauninājumu", "update_failed": "Atjaunināšana neizdevās", @@ -1001,7 +957,6 @@ "default_driver": "Default Driver", "is_default": "IR NOKLUSĒJAMS", "set_default_disk": "Iestatiet noklusējuma disku", - "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk", "success_set_default_disk": "Disks ir veiksmīgi iestatīts kā noklusējums", "save_pdf_to_disk": "Saglabāt PDF uz diska", "disk_setting_description": " Iespējot šo, ja vēlaties lai katru rēķina, aprēķina un maksājuma izdrukas PDF kopiju saglabātu diskā. Šī opcija samazinās ielādēšanas laiku, kad apskatīsiet PDF.", @@ -1107,18 +1062,10 @@ "database_variables_save_successfully": "Database configured successfully." } }, - "layout_login": { - "copyright_crater": "Copyright @ Crater - 2020", - "super_simple_invoicing": "Super Simple Invoicing", - "for_freelancer": "for Freelancers &", - "small_businesses": "Small Businesses ", - "crater_help": "Crater helps you track expenses, record payments & generate beautiful", - "invoices_and_estimates": "invoices & estimates with ability to choose multiple templates." - }, "validation": { "invalid_phone": "Invalid Phone Number", - "invalid_url": "Invalid url (ex: http://www.crater.com)", - "invalid_domain_url": "Invalid url (ex: crater.com)", + "invalid_url": "Invalid url (ex: http://www.craterapp.com)", + "invalid_domain_url": "Invalid url (ex: craterapp.com)", "required": "Field is required", "email_incorrect": "Incorrect Email.", "email_already_taken": "The email has already been taken.", @@ -1151,8 +1098,7 @@ "address_maxlength": "Address should not be greater than 255 characters.", "ref_number_maxlength": "Ref Number should not be greater than 255 characters.", "prefix_maxlength": "Prefix should not be greater than 5 characters.", - "something_went_wrong": "something went wrong", - "number_length_minvalue": "Number lenght should be greater than 0" + "something_went_wrong": "something went wrong" }, "pdf_estimate_label": "Aprēķins", "pdf_estimate_number": "Aprēķina numurs", @@ -1167,7 +1113,6 @@ "pdf_quantity_label": "Daudzums", "pdf_price_label": "Cena", "pdf_discount_label": "Atlaide", - "pdf_tax_label": "Nodoklis", "pdf_amount_label": "Summa", "pdf_subtotal": "Starpsumma", "pdf_total": "Kopā", @@ -1194,5 +1139,6 @@ "pdf_expenses_label": "Izdevumi", "pdf_bill_to": "Saņēmējs,", "pdf_ship_to": "Piegādes adrese,", - "pdf_received_from": "Saņemts no:" + "pdf_received_from": "Saņemts no:", + "pdf_tax_label": "Nodoklis" } diff --git a/resources/assets/js/plugins/nl.json b/resources/scripts/locales/nl.json similarity index 90% rename from resources/assets/js/plugins/nl.json rename to resources/scripts/locales/nl.json index b1aa705d5..2f0e3b22e 100644 --- a/resources/assets/js/plugins/nl.json +++ b/resources/scripts/locales/nl.json @@ -52,7 +52,7 @@ "percentage": "Percentage", "tax": "BELASTING", "total_amount": "TOTAALBEDRAG", - "bill_to": "Factuur aan", + "bill_to": "Rekening naar", "ship_to": "Verzend naar", "due": "Openstaand", "draft": "Concept", @@ -86,8 +86,7 @@ "retry": "Retr", "choose_note": "Kies notitie", "no_note_found": "Geen notitie gevonden", - "insert_note": "Notitie invoegen", - "copied_pdf_url_clipboard": "PDF link naar klembord gekopieerd!" + "insert_note": "Notitie invoegen" }, "dashboard": { "select_year": "Selecteer jaar", @@ -104,9 +103,6 @@ "net_income": "Netto inkomen", "year": "Selecteer jaar" }, - "weekly_invoices": { - "title": "Wekelijkse factuur" - }, "monthly_chart": { "title": "Verkoop en kosten" }, @@ -178,8 +174,8 @@ "copy_billing_address": "Kopiëren van facturering", "no_customers": "Nog geen klanten!", "no_customers_found": "Geen klanten gevonden!", - "no_contact": "Geen contact", - "no_contact_name": "Geen contactnaam", + "no_contact": "No contact", + "no_contact_name": "No contact name", "list_of_customers": "Hier vind je jouw klanten terug.", "primary_display_name": "Primaire weergavenaam", "select_currency": "Selecteer valuta", @@ -203,7 +199,7 @@ "added_on": "Toegevoegd", "price": "Prijs", "date_of_creation": "Datum van creatie", - "not_selected": "Geen item geselecteerd", + "not_selected": "No item selected", "action": "Actie", "add_item": "Voeg item toe", "save_item": "Item opslaan", @@ -245,7 +241,7 @@ "contact": "Contact", "add_item": "Voeg een item toe", "date": "Datum", - "due_date": "Vervaldatum", + "due_date": "Opleveringsdatum", "expiry_date": "Vervaldatum", "status": "Status", "add_tax": "Belasting toevoegen", @@ -258,7 +254,7 @@ "mark_as_sent": "Markeren als verzonden", "send_estimate": "Verzend offerte", "resend_estimate": "Offerte opnieuw verzenden", - "record_payment": "Betaling registreren", + "record_payment": "Bestaling registreren", "add_estimate": "Offerte toevoegen", "save_estimate": "Bewaar offerte", "confirm_conversion": "Deze offerte wordt gebruikt om een nieuwe factuur te maken.", @@ -274,7 +270,7 @@ "required": "Veld is vereist" }, "accepted": "Geaccepteerd", - "rejected": "Afgewezen", + "rejected": "Rejected", "sent": "Verzonden", "draft": "Concept", "declined": "Geweigerd", @@ -295,7 +291,6 @@ "created_message": "Offerte is gemaakt", "updated_message": "Offerte succesvol bijgewerkt", "deleted_message": "Offerte succesvol verwijderd | Offertes zijn succesvol verwijderd", - "user_email_does_not_exist": "E-mailadres van gebruiker bestaat niet", "something_went_wrong": "Er is iets fout gegaan", "item": { "title": "Titel van het item", @@ -321,9 +316,9 @@ "all": "Allemaal", "paid": "Betaald", "unpaid": "Onbetaald", - "viewed": "Bekeken", - "overdue": "Over tijd", - "completed": "Voltooid", + "viewed": "Viewed", + "overdue": "Overdue", + "completed": "Completed", "customer": "Klant", "paid_status": "Betaling", "ref_no": "REF NR.", @@ -339,7 +334,7 @@ "contact": "Contact", "add_item": "Voeg een item toe", "date": "Datum", - "due_date": "Vervaldatum", + "due_date": "Opleveringsdatum", "status": "Status", "add_tax": "Belasting toevoegen", "amount": "Bedrag", @@ -355,7 +350,7 @@ "invoice_mark_as_sent": "Deze factuur wordt gemarkeerd als verzonden", "confirm_send": "Deze factuur wordt via e-mail naar de klant gestuurd", "invoice_date": "Factuur datum", - "record_payment": "Betaling registreren", + "record_payment": "Bestaling registreren", "add_new_invoice": "Nieuwe factuur toevoegen", "update_expense": "Onkosten bijwerken", "edit_invoice": "Factuur bewerken", @@ -368,7 +363,7 @@ "select_invoice": "Selecteer Factuur", "no_matching_invoices": "Er zijn geen overeenkomende facturen!", "mark_as_sent_successfully": "Factuur gemarkeerd als succesvol verzonden", - "send_invoice_successfully": "Factuur succesvol verzonden", + "invoice_sent_successfully": "Factuur succesvol verzonden", "cloned_successfully": "Factuur succesvol gekloond", "clone_invoice": "Factuur klonen", "confirm_clone": "Deze factuur wordt gekloond in een nieuwe factuur", @@ -386,39 +381,14 @@ "select_an_item": "Typ of klik om een item te selecteren", "type_item_description": "Type Item Beschrijving (optioneel)" }, - "payment_attached_message": "Aan een van de geselecteerde facturen is al een betaling gekoppeld. Zorg ervoor dat u eerst de bijgevoegde betalingen verwijdert om door te gaan met de verwijdering", "confirm_delete": "Deze factuur wordt permanent verwijderd | Deze facturen worden permanent verwijderd", "created_message": "Factuur succesvol aangemaakt", "updated_message": "Factuur succesvol bijgewerkt", "deleted_message": "Factuur succesvol verwijderd | Facturen succesvol verwijderd", "marked_as_sent_message": "Factuur gemarkeerd als succesvol verzonden", - "user_email_does_not_exist": "E-mailadres van gebruiker bestaat niet", "something_went_wrong": "Er is iets fout gegaan", "invalid_due_amount_message": "Het totale factuurbedrag mag niet lager zijn dan het totale betaalde bedrag voor deze factuur. Werk de factuur bij of verwijder de bijbehorende betalingen om door te gaan." }, - "credit_notes": { - "title": "Kredietnota's", - "credit_notes_list": "Lijst met creditnota's", - "credit_notes": "Kredietnota's", - "contact": "Contact", - "date": "Datum", - "amount": "Bedrag", - "action": "Actie", - "credit_number": "Kredietnummer", - "notes": "Opmerkingen", - "confirm_delete": "Wilt u deze creditnota verwijderen?", - "item": { - "title": "Titel van het item", - "description": "Omschrijving", - "quantity": "Aantal stuks", - "price": "Prijs", - "discount": "Korting", - "total": "Totaal", - "total_discount": "Totale korting", - "sub_total": "Subtotaal", - "tax": "BTW" - } - }, "payments": { "title": "Betalingen", "payments_list": "Betalingslijst", @@ -442,15 +412,14 @@ "update_payment": "Betaling bijwerken", "payment": "Betaling | Betalingen", "no_payments": "Nog geen betalingen!", - "not_selected": "Niet geselecteerd", - "no_invoice": "Geen factuur", + "not_selected": "Not selected", + "no_invoice": "No invoice", "no_matching_payments": "Er zijn geen overeenkomende betalingen!", "list_of_payments": "Hier vind je jouw betalingen terug.", "select_payment_mode": "Selecteer betalingswijze", "confirm_mark_as_sent": "Deze offerte wordt gemarkeerd als verzonden", "confirm_send_payment": "Deze betaling wordt via e-mail naar de klant gestuurd", "send_payment_successfully": "Betaling succesvol verzonden", - "user_email_does_not_exist": "E-mailadres van gebruiker bestaat niet", "something_went_wrong": "Er is iets fout gegaan", "confirm_delete": "Deze betaling wordt permanent verwijderd | Deze betalingen worden permanent verwijderd", "created_message": "De betaling is succesvol aangemaakt", @@ -473,7 +442,7 @@ "receipt": "Bon", "amount": "Bedrag", "action": "Actie", - "not_selected": "Niet geselecteerd", + "not_selected": "Not selected", "note": "Notitie", "category_id": "Categorie ID", "date": "Uitgavendatum", @@ -515,8 +484,7 @@ "password_reset_successfully": "Wachtwoord opnieuw ingesteld", "enter_email": "Voer email in", "enter_password": "Voer wachtwoord in", - "retype_password": "Geef nogmaals het wachtwoord", - "login_placeholder": "mail@voorbeeld.co" + "retype_password": "Geef nogmaals het wachtwoord" }, "users": { "title": "Gebruikers", @@ -580,7 +548,7 @@ "invoices": { "invoice": "Factuur", "invoice_date": "Factuur datum", - "due_date": "Vervaldatum", + "due_date": "Opleveringsdatum", "amount": "Bedrag", "contact_name": "Contactnaam", "status": "Status" @@ -588,7 +556,7 @@ "estimates": { "estimate": "Offerte", "estimate_date": "Offerte Datum", - "due_date": "Vervaldatum", + "due_date": "Opleveringsdatum", "estimate_number": "Offerte nummer", "ref_number": "Referentie nummer", "amount": "Bedrag", @@ -697,7 +665,7 @@ "help_text": "Hulp Text", "default_value": "Standaard waarde", "prefix": "Voorvoegsel", - "starting_number": "Startnummer", + "starting_number": "Starting Number", "model": "Model", "help_text_description": "Voer tekst in om gebruikers te helpen het doel van dit aangepaste veld te begrijpen.", "suffix": "Achtervoegsel", @@ -751,30 +719,24 @@ "title": "Facturen", "notes": "Opmerkingen", "invoice_prefix": "Factuurvoorvoegsel", - "invoice_number_length": "Lengte factuurnummer", "default_invoice_email_body": "Standaard factuur email text", "invoice_settings": "Factuurinstellingen", "autogenerate_invoice_number": "Factuurnummer automatisch genereren", - "invoice_setting_description": "Schakel dit uit als u niet automatisch factuurnummers wilt genereren telkens wanneer u een nieuwe factuur maakt.", - "invoice_email_attachment": "Stuur factuur als bijlage", - "invoice_email_attachment_setting_description": "Schakel dit in als u facturen als e-mailbijlage wilt verzenden. Houd er rekening mee dat de knop 'Factuur bekijken' in e-mails niet meer wordt weergegeven wanneer deze is ingeschakeld.", + "autogenerate_invoice_number_desc": "Schakel dit uit als u niet automatisch factuurnummers wilt genereren telkens wanneer u een nieuwe factuur maakt.", "enter_invoice_prefix": "Voer het factuurvoorvoegsel in", "terms_and_conditions": "Voorwaarden", "company_address_format": "Bedrijfsadres format", "shipping_address_format": "Verzendadres format", "billing_address_format": "Factuuradres format", - "invoice_setting_updated": "Factuurinstelling succesvol bijgewerkt" + "invoice_settings_updated": "Factuurinstelling succesvol bijgewerkt" }, "estimates": { "title": "Offertes", "estimate_prefix": "Voorvoegsel schatten", - "estimate_number_length": "Lengte offerte nummer", "default_estimate_email_body": "Standaard offerte email text", "estimate_settings": "Instellingen schatten", "autogenerate_estimate_number": "Automatisch geschat nummer genereren", "estimate_setting_description": "Schakel dit uit als u niet automatisch offertesaantallen wilt genereren telkens wanneer u een nieuwe offerte maakt.", - "estimate_email_attachment": "Stuur offerte als bijlage", - "estimate_email_attachment_setting_description": "Schakel dit in als u de offertes als e-mailbijlage wilt verzenden. Houd er rekening mee dat de knop 'Bekijk offerte' in e-mails niet meer wordt weergegeven wanneer deze is ingeschakeld.", "enter_estimate_prefix": "Voer het prefixnummer in", "estimate_setting_updated": "Instelling Offerte succesvol bijgewerkt", "company_address_format": "Bedrijfsadres format", @@ -783,15 +745,12 @@ }, "payments": { "title": "Betalingen", - "description": "Manieren om te betalen", + "description": "Modes of transaction for payments", "payment_prefix": "Betalingsvoorvoegsel", - "payment_number_length": "Lengte van betalingsnummer", - "default_payment_email_body": "Standaard format betalingsmail", + "default_payment_email_body": "Default Payment Email Body", "payment_settings": "Betalingsinstellingen", "autogenerate_payment_number": "Betalingsnummer automatisch genereren", "payment_setting_description": "Schakel dit uit als u niet elke keer dat u een nieuwe betaling aanmaakt, automatisch betalingsnummers wilt genereren.", - "payment_email_attachment": "Stuur betaalbewijs als bijlage", - "payment_email_attachment_setting_description": "Schakel dit in als u de betalingsbewijzen als e-mailbijlage wilt verzenden. Houd er rekening mee dat de knop 'Betaling bekijken' in e-mails niet meer wordt weergegeven wanneer deze is ingeschakeld.", "enter_payment_prefix": "Voer het betalingsvoorvoegsel in", "payment_setting_updated": "Betalingsinstelling geüpdatet", "payment_modes": "Betaalmethodes", @@ -931,7 +890,6 @@ "download_zip_file": "Download ZIP-bestand", "unzipping_package": "Pakket uitpakken", "copying_files": "Bestanden kopiëren", - "deleting_files": "Ongebruikte bestanden verwijderen", "running_migrations": "Migraties uitvoeren", "finishing_update": "Afwerking Update", "update_failed": "Update mislukt", @@ -970,15 +928,15 @@ "disk_type": "Type", "disk_name": "Naam van de schijf", "new_disk": "Nieuwe schijf toevoegen", - "filesystem_driver": "Bestandssysteem locatie", + "filesystem_driver": "Filesystem Driver", "local_driver": "lokaal besturingsprogramma", - "local_root": "locale schijf", + "local_root": "local Root", "public_driver": "Publiek besturingsprogramma", - "public_root": "Openbare schijf", + "public_root": "Public Root", "public_url": "Publieke URL", "public_visibility": "Publieke zichtbaarheid", "media_driver": "Media stuurprogramma", - "media_root": "Media schijf", + "media_root": "Media Root", "aws_driver": "AWS Stuurprogramma", "aws_key": "AWS Sleutel", "aws_secret": "AWS Secret", @@ -1001,7 +959,6 @@ "default_driver": "Standaard stuurprogramma", "is_default": "IS STANDAARD", "set_default_disk": "Standaardschijf instellen", - "set_default_disk_confirm": "Deze schijf zal als standaard worden ingesteld en alle nieuwe PDF's worden opgeslagen op deze schijf", "success_set_default_disk": "Standaardschijf ingesteld", "save_pdf_to_disk": "PDF's opslaan op schijf", "disk_setting_description": " Schakel dit in als je een kopie van elke factuur, raming en betalingsbewijs automatisch op je standaard schijf wilt opslaan. Het inschakelen van deze optie zal de laadtijd verminderen wanneer de PDF's worden bekeken.", @@ -1107,18 +1064,10 @@ "database_variables_save_successfully": "Database succesvol geconfigureerd." } }, - "layout_login": { - "copyright_crater": "Copyright @ Crater - 2020", - "super_simple_invoicing": "Supereenvoudige facturering", - "for_freelancer": "voor freelancers &", - "small_businesses": "Kleine bedrijven", - "crater_help": "Crater helpt u uitgaven bij te houden, betalingen te registreren en mooie inkomsten te genereren", - "invoices_and_estimates": "facturen en offertes met de mogelijkheid om meerdere sjablonen te kiezen." - }, "validation": { "invalid_phone": "Ongeldig Telefoonnummer", - "invalid_url": "Ongeldige URL (bijvoorbeeld: http://www.crater.com))", - "invalid_domain_url": "Ongeldige URL (bijvoorbeeld: crater.com))", + "invalid_url": "Ongeldige URL (bijvoorbeeld: http://www.craterapp.com))", + "invalid_domain_url": "Ongeldige URL (bijvoorbeeld: craterapp.com))", "required": "Veld is verplicht", "email_incorrect": "Incorrecte Email.", "email_already_taken": "De email is al in gebruik.", @@ -1151,8 +1100,7 @@ "address_maxlength": "Adres mag niet groter zijn dan 255 tekens.", "ref_number_maxlength": "Ref-nummer mag niet groter zijn dan 255 tekens.", "prefix_maxlength": "Het voorvoegsel mag niet meer dan 5 tekens bevatten.", - "something_went_wrong": "Er is iets fout gegaan", - "number_length_minvalue": "Het getal moet groter zijn dan 0" + "something_went_wrong": "Er is iets fout gegaan" }, "pdf_estimate_label": "Offerte", "pdf_estimate_number": "Offerte nummer", @@ -1161,17 +1109,16 @@ "pdf_invoice_label": "Factuur", "pdf_invoice_number": "Factuurnummer", "pdf_invoice_date": "Factuur datum", - "pdf_invoice_due_date": "Vervaldatum", + "pdf_invoice_due_date": "Opleveringsdatum", "pdf_notes": "Opmerkingen", "pdf_items_label": "Artikelen", "pdf_quantity_label": "Aantal stuks", "pdf_price_label": "Prijs", "pdf_discount_label": "Korting", - "pdf_tax_label": "Belasting", "pdf_amount_label": "Bedrag", "pdf_subtotal": "Subtotaal", "pdf_total": "Totaal", - "pdf_payment_label": "Betaling", + "pdf_payment_label": "Payment", "pdf_payment_receipt_label": "Betalingsafschrift", "pdf_payment_date": "Betalingsdatum", "pdf_payment_number": "Betalingsnummer", @@ -1180,9 +1127,9 @@ "pdf_expense_report_label": "UITGAVEN RAPPORT", "pdf_total_expenses_label": "TOTALE UITGAVEN", "pdf_profit_loss_label": "WINST & VERLIES RAPPORT", - "pdf_sales_customers_label": "Klant verkoop rapport", - "pdf_sales_items_label": "Artikel verkooprapport", - "pdf_tax_summery_label": "Belastingoverzicht", + "pdf_sales_customers_label": "Sales Customer Report", + "pdf_sales_items_label": "Sales Item Report", + "pdf_tax_summery_label": "Tax Summary Report", "pdf_income_label": "INKOMEN", "pdf_net_profit_label": "NETTO WINST", "pdf_customer_sales_report": "Verkooprapport: per klant", @@ -1194,5 +1141,6 @@ "pdf_expenses_label": "Uitgaven", "pdf_bill_to": "Rekening naar,", "pdf_ship_to": "Verzend naar,", - "pdf_received_from": "Ontvangen van:" + "pdf_received_from": "Ontvangen van:", + "pdf_tax_label": "Tax" } diff --git a/resources/assets/js/plugins/pl.json b/resources/scripts/locales/pl.json similarity index 100% rename from resources/assets/js/plugins/pl.json rename to resources/scripts/locales/pl.json diff --git a/resources/assets/js/plugins/pt-br.json b/resources/scripts/locales/pt-br.json similarity index 95% rename from resources/assets/js/plugins/pt-br.json rename to resources/scripts/locales/pt-br.json index 23dbd1ec5..90e5ba5f6 100644 --- a/resources/assets/js/plugins/pt-br.json +++ b/resources/scripts/locales/pt-br.json @@ -95,9 +95,6 @@ "net_income": "Resultado líquido", "year": "Selecione Ano" }, - "weekly_invoices": { - "title": "Faturas Semanais" - }, "monthly_chart": { "title": "Vendas e Despesas" }, @@ -274,7 +271,6 @@ "created_message": "Orçamento criado com sucesso", "updated_message": "Orçamento atualizado com sucesso", "deleted_message": "Orçamento excluído com sucesso | Orçamentos excluídos com sucesso", - "user_email_does_not_exist": "Email de usuário não existe", "something_went_wrong": "Algo deu errado", "item": { "title": "Titulo do item", @@ -346,7 +342,7 @@ "select_invoice": "Selecionar Fatura", "no_matching_invoices": "Não há faturas correspondentes!", "mark_as_sent_successfully": "Fatura marcada como enviada com sucesso", - "send_invoice_successfully": "Fatura enviada com sucesso", + "invoice_sent_successfully": "Fatura enviada com sucesso", "cloned_successfully": "Fatura clonada com sucesso", "clone_invoice": "Clonar fatura", "confirm_clone": "Esta fatura será clonada em uma nova fatura", @@ -364,39 +360,14 @@ "select_an_item": "Digite ou clique para selecionar um item", "type_item_description": "Tipo Descrição do item (opcional)" }, - "payment_attached_message": "Uma das faturas selecionadas já possui um pagamento anexado. Certifique-se de excluir os pagamentos anexados primeiro, a fim de prosseguir com a remoção", "confirm_delete": "Você não poderá recuperar esta fatura | Você não poderá recuperar essas faturas", "created_message": "Fatura criada com sucesso", "updated_message": "Fatura atualizada com sucesso", "deleted_message": "Fatura excluída com sucesso | Faturas excluídas com sucesso", "marked_as_sent_message": "Fatura marcada como enviada com sucesso", - "user_email_does_not_exist": "O email do usuário não existe", "something_went_wrong": "Algo deu errado", "invalid_due_amount_message": "O valor total da fatura não pode ser menor que o valor total pago para esta fatura. Atualize a fatura ou exclua os pagamentos associados para continuar." }, - "credit_notes": { - "title": "Notas de credito", - "credit_notes_list": "Lista Notas de credito", - "credit_notes": "Notas de credito", - "contact": "Contato", - "date": "Data", - "amount": "Montante", - "action": "Ação", - "credit_number": "Número de crédito", - "notes": "Notes", - "confirm_delete": "Deseja excluir esta nota de crédito?", - "item": { - "title": "Título do Item", - "description": "Descrição", - "quantity": "Quantidade", - "price": "Preço", - "discount": "Desconto", - "total": "Total", - "total_discount": "Desconto Total", - "sub_total": "SubTotal", - "tax": "Imposto" - } - }, "payments": { "title": "Pagamentos", "payments_list": "Lista de Pagamentos", @@ -487,8 +458,7 @@ "password_reset_successfully": "Senha redefinida com sucesso", "enter_email": "Digite email", "enter_password": "Digite a senha", - "retype_password": "Confirme a Senha", - "login_placeholder": "mail@exemplo.com" + "retype_password": "Confirme a Senha" }, "reports": { "title": "Relatório", @@ -694,10 +664,10 @@ "invoice_prefix": "Fatura Prefixo", "invoice_settings": "Configrações da Fatura", "autogenerate_invoice_number": "Gerar automaticamente o número da Fatura", - "invoice_setting_description": "Desative isso, se você não deseja gerar automaticamente números da Fatura sempre que criar uma nova.", + "autogenerate_invoice_number_desc": "Desative isso, se você não deseja gerar automaticamente números da Fatura sempre que criar uma nova.", "enter_invoice_prefix": "Digite o prefixo da Fatura", "terms_and_conditions": "Termos e Condições", - "invoice_setting_updated": "Configuração da Fatura atualizada com sucesso" + "invoice_settings_updated": "Configuração da Fatura atualizada com sucesso" }, "estimates": { "title": "Orçamentos", @@ -927,17 +897,9 @@ "database_variables_save_successfully": "Banco de dados configurado com sucesso." } }, - "layout_login": { - "copyright_crater": "Copyright @ Crater - 2020", - "super_simple_invoicing": "Faturamento super simples", - "for_freelancer": "Para Freelancers &", - "small_businesses": "Pequenos Negócios ", - "crater_help": "Crater ajuda a rastrear despesas, registrar pagamentos e gerar belas", - "invoices_and_estimates": "Faturas e Orçamentos com capacidade de escolher vários modelos." - }, "validation": { "invalid_phone": "Número de telefone inválido", - "invalid_url": "url inválidas (ex: http://www.crater.com)", + "invalid_url": "url inválidas (ex: http://www.craterapp.com)", "required": "Campo obrigatório", "email_incorrect": "E-mail incorreto", "email_already_taken": "O email já foi recebido.", diff --git a/resources/scripts/locales/pt.json b/resources/scripts/locales/pt.json new file mode 100644 index 000000000..761aae117 --- /dev/null +++ b/resources/scripts/locales/pt.json @@ -0,0 +1,1146 @@ +{ + "navigation": { + "dashboard": "Painel", + "customers": "Clientes", + "items": "Itens", + "invoices": "Faturas", + "expenses": "Despesas", + "estimates": "Orçamentos", + "payments": "Pagamentos", + "reports": "Relatórios", + "settings": "Configurações", + "logout": "Encerrar sessão", + "users": "Users" + }, + "general": { + "add_company": "Add Company", + "view_pdf": "Ver PDF", + "copy_pdf_url": "Copy PDF Url", + "download_pdf": "Baixar PDF", + "save": "Salvar", + "create": "Create", + "cancel": "Cancelar", + "update": "Atualizar", + "deselect": "Desmarcar", + "download": "Baixar", + "from_date": "A partir da Data", + "to_date": "Até a Data", + "from": "De", + "to": "Para", + "sort_by": "Ordenar por", + "ascending": "Crescente", + "descending": "Descendente", + "subject": "Sujeita", + "body": "Corpo", + "message": "Mensagem", + "send": "Send", + "go_back": "Voltar", + "back_to_login": "Voltar ao Login", + "home": "Home", + "filter": "Filtrar", + "delete": "Excluir", + "edit": "Editar", + "view": "Ver", + "add_new_item": "Adicionar novo item", + "clear_all": "Limpar tudo", + "showing": "Mostrando", + "of": "de", + "actions": "Ações", + "subtotal": "Total parcial", + "discount": "Desconto", + "fixed": "Fixado", + "percentage": "Porcentagem", + "tax": "Imposto", + "total_amount": "Quantidade Total", + "bill_to": "Cobrar a", + "ship_to": "Envie a", + "due": "Vencida", + "draft": "Rascunho", + "sent": "Enviado", + "all": "Todos", + "select_all": "Selecionar tudo", + "choose_file": "Escolha um arquivo.", + "choose_template": "Escolha um modelo", + "choose": "Escolher", + "remove": "Excluir", + "powered_by": "Distribuído por", + "bytefury": "Bytefury", + "select_a_status": "Selecione um status", + "select_a_tax": "Selecione um Imposto", + "search": "Buscar", + "are_you_sure": "Tem certeza?", + "list_is_empty": "Lista está vazia.", + "no_tax_found": "Imposto não encontrado!", + "four_zero_four": "404", + "you_got_lost": "Ops! Se perdeu!", + "go_home": "Ir para Home", + "test_mail_conf": "Testar configuração de email", + "send_mail_successfully": "Correio enviado com sucesso", + "setting_updated": "Configuração atualizada com sucesso", + "select_state": "Selecione Estado", + "select_country": "Selecionar pais", + "select_city": "Selecionar cidade", + "street_1": "Rua 1", + "street_2": "Rua # 2", + "action_failed": "Ação: Falhou", + "retry": "Atualização falhou", + "choose_note": "Choose Note", + "no_note_found": "No Note Found", + "insert_note": "Insert Note" + }, + "dashboard": { + "select_year": "Selecione Ano", + "cards": { + "due_amount": "Montante devido", + "customers": "Clientes", + "invoices": "Faturas", + "estimates": "Orçamentos" + }, + "chart_info": { + "total_sales": "Vendas", + "total_receipts": "Receitas", + "total_expense": "Despesas", + "net_income": "Resultado líquido", + "year": "Selecione Ano" + }, + "monthly_chart": { + "title": "Vendas e Despesas" + }, + "recent_invoices_card": { + "title": "Faturas vencidas", + "due_on": "vencido em", + "customer": "Cliente", + "amount_due": "Valor Devido", + "actions": "Ações", + "view_all": "Ver todos" + }, + "recent_estimate_card": { + "title": "Orçamentos Recentes", + "date": "Data", + "customer": "Cliente", + "amount_due": "Valor Devido", + "actions": "Ações", + "view_all": "Ver todos" + } + }, + "tax_types": { + "name": "Nome", + "description": "Descrição", + "percent": "Porcentagem", + "compound_tax": "Imposto compuesto" + }, + "global_search": { + "search": "Search...", + "customers": "Clientes", + "users": "Users", + "no_results_found": "No Results Found" + }, + "customers": { + "title": "Clientes", + "add_customer": "Adicionar cliente", + "contacts_list": "Lista de clientes", + "name": "Nome", + "mail": "Mail | Mails", + "statement": "Statement", + "display_name": "Nome de exibição", + "primary_contact_name": "Nome do contato principal", + "contact_name": "Nome de Contato", + "amount_due": "Valor Devido", + "email": "Email", + "address": "Endereço", + "phone": "Telefone", + "website": "Site", + "overview": "Overview", + "enable_portal": "Enable Portal", + "country": "Pais", + "state": "Estado", + "city": "Cidade", + "zip_code": "Código postal", + "added_on": "Adicionado", + "action": "Ação", + "password": "Senha", + "street_number": "Número", + "primary_currency": "Moeda principal", + "description": "Descrição", + "add_new_customer": "Adicionar novo cliente", + "save_customer": "Salvar cliente", + "update_customer": "Atualizar cliente", + "customer": "Cliente | Clientes", + "new_customer": "Novo cliente", + "edit_customer": "Editar cliente", + "basic_info": "Informação basica", + "billing_address": "Endereço de cobrança", + "shipping_address": "Endereço de entrega", + "copy_billing_address": "Cópia de faturamento", + "no_customers": "Ainda não há clientes!", + "no_customers_found": "Clientes não encontrados!", + "no_contact": "No contact", + "no_contact_name": "No contact name", + "list_of_customers": "Esta seção conterá a lista de clientes.", + "primary_display_name": "Nome de exibição principal", + "select_currency": "Selecione o tipo de moeda", + "select_a_customer": "Selecione um cliente", + "type_or_click": "Digite ou clique para selecionar", + "new_transaction": "Nova transação", + "no_matching_customers": "Não há clientes correspondentes!", + "phone_number": "Número de telefone", + "create_date": "Criar Data", + "confirm_delete": "Você não poderá recuperar este cliente e todas as faturas, estimativas e pagamentos relacionados. | Você não poderá recuperar esses clientes e todas as faturas, estimativas e pagamentos relacionados.", + "created_message": "Cliente criado com sucesso", + "updated_message": "Cliente atualizado com sucesso", + "deleted_message": "Cliente excluído com sucesso | Clientes excluídos com sucesso" + }, + "items": { + "title": "Itens", + "items_list": "Lista de Itens", + "name": "Nome", + "unit": "Unidade", + "description": "Descrição", + "added_on": "Adicionado", + "price": "Preço", + "date_of_creation": "Data de criação", + "not_selected": "No item selected", + "action": "Ação", + "add_item": "Adicionar item", + "save_item": "Salvar item", + "update_item": "Atualizar item", + "item": "Item | Itens", + "add_new_item": "Adicionar novo item", + "new_item": "Novo item", + "edit_item": "Editar item", + "no_items": "Ainda não existe itens", + "list_of_items": "Esta seção conterá a lista de itens.", + "select_a_unit": "Seleciona unidade", + "taxes": "Impostos", + "item_attached_message": "Não é possível excluir um item que já está em uso.", + "confirm_delete": "Você não poderá recuperar este item | Você não poderá recuperar esses itens", + "created_message": "Item criado com sucesso", + "updated_message": "Item atualizado com sucesso", + "deleted_message": "Item excluído com sucesso | Itens Excluídos com sucesso" + }, + "estimates": { + "title": "Orçamentos", + "estimate": "Orçamento | Orçamentos", + "estimates_list": "Lista de orçamentos", + "days": "{dias} dias", + "months": "{meses} Mês", + "years": "{Anos} Ano", + "all": "Todos", + "paid": "Pago", + "unpaid": "Não pago", + "customer": "CLIENTE", + "ref_no": "NÚMERO DE REFERÊNCIA.", + "number": "NÚMERO", + "amount_due": "Valor Devido", + "partially_paid": "Pago parcialmente", + "total": "Total", + "discount": "Desconto", + "sub_total": "Subtotal", + "estimate_number": "Numero do Orçamento", + "ref_number": "Referência", + "contact": "Contato", + "add_item": "Adicionar Item", + "date": "Data", + "due_date": "Data de Vencimento", + "expiry_date": "Data de expiração", + "status": "Status", + "add_tax": "Adicionar Imposto", + "amount": "Montante", + "action": "Ação", + "notes": "Observações", + "tax": "Imposto", + "estimate_template": "Modelo de orçamento", + "convert_to_invoice": "Converter em fatura", + "mark_as_sent": "Marcar como enviado", + "send_estimate": "Enviar orçamento", + "resend_estimate": "Resend Estimate", + "record_payment": "Registro de pago", + "add_estimate": "Adicionar orçamento", + "save_estimate": "Salvar Orçamento", + "confirm_conversion": "Deseja converter este orçamento em uma fatura?", + "conversion_message": "Converção realizada com sucesso", + "confirm_send_estimate": "Este orçamento será enviado por email ao cliente", + "confirm_mark_as_sent": "Este orçamento será marcado como enviado", + "confirm_mark_as_accepted": "Este orçamento será marcado como Aceito", + "confirm_mark_as_rejected": "Este orçamento será marcado como Rejeitado", + "no_matching_estimates": "Não há orçamentos correspondentes!", + "mark_as_sent_successfully": "Orçamento como marcado como enviado com sucesso", + "send_estimate_successfully": "Orçamento enviado com sucesso", + "errors": { + "required": "Campo obrigatório" + }, + "accepted": "Aceito", + "rejected": "Rejected", + "sent": "Enviado", + "draft": "Rascunho", + "declined": "Rejeitado", + "new_estimate": "Novo orçamento", + "add_new_estimate": "Adicionar novo orçamento", + "update_Estimate": "Atualizar orçamento", + "edit_estimate": "Editar orçamento", + "items": "artículos", + "Estimate": "Orçamento | Orçamentos", + "add_new_tax": "Adicionar novo imposto", + "no_estimates": "Ainda não há orcamentos", + "list_of_estimates": "Esta seção contém a lista de orçamentos.", + "mark_as_rejected": "Marcar como rejeitado", + "mark_as_accepted": "Marcar como aceito", + "marked_as_accepted_message": "Orçamento marcado como aceito", + "marked_as_rejected_message": "Orçamento marcado como rejeitado", + "confirm_delete": "Não poderá recuperar este orçamento | Não poderá recuperar estes orçamentos", + "created_message": "Orçamento criado com sucesso", + "updated_message": "Orçamento atualizado com sucesso", + "deleted_message": "Orçamento excluído com sucesso | Orçamentos excluídos com sucesso", + "something_went_wrong": "Algo deu errado", + "item": { + "title": "Titulo do item", + "description": "Descrição", + "quantity": "Quantidade", + "price": "Preço", + "discount": "Desconto", + "total": "Total", + "total_discount": "Desconto total", + "sub_total": "Subtotal", + "tax": "Imposto", + "amount": "Montante", + "select_an_item": "Escreva ou clique para selecionar um item", + "type_item_description": "Tipo Item Descrição (opcional)" + } + }, + "invoices": { + "title": "Faturas", + "invoices_list": "Lista de faturas", + "days": "{dias} dias", + "months": "{meses} Mês", + "years": "{anos} Ano", + "all": "Todas", + "paid": "Paga", + "unpaid": "Não Paga", + "viewed": "Viewed", + "overdue": "Overdue", + "completed": "Completed", + "customer": "CLIENTE", + "paid_status": "STATUS PAGAMENTO", + "ref_no": "REFERÊNCIA", + "number": "NÚMERO", + "amount_due": "VALOR DEVIDO", + "partially_paid": "Parcialmente pago", + "total": "Total", + "discount": "Desconto", + "sub_total": "Subtotal", + "invoice": "Fatura | Faturas", + "invoice_number": "Número da fatura", + "ref_number": "Referência", + "contact": "Contato", + "add_item": "Adicionar um item", + "date": "Data", + "due_date": "Data de Vencimento", + "status": "Status", + "add_tax": "Adicionar imposto", + "amount": "Montante", + "action": "Ação", + "notes": "Observações", + "view": "Ver", + "send_invoice": "Enviar Fatura", + "resend_invoice": "Resend Invoice", + "invoice_template": "Modelo da Fatura", + "template": "Modelo", + "mark_as_sent": "Marcar como enviada", + "confirm_send_invoice": "Esta fatura será enviada por e-mail ao cliente", + "invoice_mark_as_sent": "Esta fatura será marcada como enviada", + "confirm_send": "Esta fatura será enviada por e-mail ao cliente", + "invoice_date": "Data da Fatura", + "record_payment": "Gravar Pagamento", + "add_new_invoice": "Adicionar Nova Fatura", + "update_expense": "Atualizar Despesa", + "edit_invoice": "Editar Fatura", + "new_invoice": "Nova Fatura", + "save_invoice": "Salvar Fatura", + "update_invoice": "Atualizar Fatura", + "add_new_tax": "Adicionar novo Imposto", + "no_invoices": "Ainda não há faturas!", + "list_of_invoices": "Esta seção conterá a lista de faturas.", + "select_invoice": "Selecionar Fatura", + "no_matching_invoices": "Não há faturas correspondentes!", + "mark_as_sent_successfully": "Fatura marcada como enviada com sucesso", + "invoice_sent_successfully": "Fatura enviada com sucesso", + "cloned_successfully": "Fatura clonada com sucesso", + "clone_invoice": "Clonar fatura", + "confirm_clone": "Esta fatura será clonada em uma nova fatura", + "item": { + "title": "Titulo do Item", + "description": "Descrição", + "quantity": "Quantidade", + "price": "Preço", + "discount": "Desconto", + "total": "Total", + "total_discount": "Desconto Total", + "sub_total": "SubTotal", + "tax": "Imposto", + "amount": "Montante", + "select_an_item": "Digite ou clique para selecionar um item", + "type_item_description": "Tipo Descrição do item (opcional)" + }, + "confirm_delete": "Você não poderá recuperar esta fatura | Você não poderá recuperar essas faturas", + "created_message": "Fatura criada com sucesso", + "updated_message": "Fatura atualizada com sucesso", + "deleted_message": "Fatura excluída com sucesso | Faturas excluídas com sucesso", + "marked_as_sent_message": "Fatura marcada como enviada com sucesso", + "something_went_wrong": "Algo deu errado", + "invalid_due_amount_message": "O valor total da fatura não pode ser menor que o valor total pago para esta fatura. Atualize a fatura ou exclua os pagamentos associados para continuar." + }, + "payments": { + "title": "Pagamentos", + "payments_list": "Lista de Pagamentos", + "record_payment": "Gravar Pagamento", + "customer": "Cliente", + "date": "Data", + "amount": "Montante", + "action": "Ação", + "payment_number": "Número do Pagamento", + "payment_mode": "Forma de Pagamento", + "invoice": "Fatura", + "note": "Observação", + "add_payment": "Adicionar Pagamento", + "new_payment": "Novo Pagamento", + "edit_payment": "Editar Pagamento", + "view_payment": "Ver Pagamento", + "add_new_payment": "Adicionar novo Pagamento", + "send_payment_receipt": "Enviar recibo de pagamento", + "send_payment": "Mande o pagamento", + "save_payment": "Salvar Pagamento", + "update_payment": "Atualizar Pagamento", + "payment": "Pagamento | Pagamentos", + "no_payments": "Ainda sem pagamentos!", + "not_selected": "Not selected", + "no_invoice": "No invoice", + "no_matching_payments": "Não há pagamentos correspondentes!", + "list_of_payments": "Esta seção conterá a lista de pagamentos.", + "select_payment_mode": "Selecione a forma de pagamento", + "confirm_mark_as_sent": "Este orçamento será marcado como enviado", + "confirm_send_payment": "This payment will be sent via email to the customer", + "send_payment_successfully": "Payment sent successfully", + "something_went_wrong": "Algo deu errado", + "confirm_delete": "Você não poderá recuperar este Pagamento | Você não poderá recuperar esses Pagamentos", + "created_message": "Pagamento criado com sucesso", + "updated_message": "Pagamento atualizado com sucesso", + "deleted_message": "Pagamento excluído com sucesso | Pagamentos excluídos com sucesso", + "invalid_amount_message": "O valor do pagamento é inválido" + }, + "expenses": { + "title": "Despesas", + "expenses_list": "Lista de Despesas", + "select_a_customer": "Selecione um cliente", + "expense_title": "Título", + "customer": "Cliente", + "contact": "Contato", + "category": "Categoria", + "from_date": "A partir da Data", + "to_date": "Até a Data", + "expense_date": "Data", + "description": "Descrição", + "receipt": "Receita", + "amount": "Montante", + "action": "Ação", + "not_selected": "Not selected", + "note": "Observação", + "category_id": "Categoria", + "date": "Data da Despesa", + "add_expense": "Adicionar Despesa", + "add_new_expense": "Adicionar Nova Despesa", + "save_expense": "Salvar Despesa", + "update_expense": "Atualizar Despesa", + "download_receipt": "Baixar Receita", + "edit_expense": "Editar Despesa", + "new_expense": "Nova Despesa", + "expense": "Despesa | Despesas", + "no_expenses": "Ainda sem Despesas!", + "list_of_expenses": "Esta seção conterá a lista de despesas.", + "confirm_delete": "Você não poderá recuperar esta despesa | Você não poderá recuperar essas despesas", + "created_message": "Despesa criada com sucesso", + "updated_message": "Despesa atualizada com sucesso", + "deleted_message": "Despesas excluídas com sucesso | Despesas excluídas com sucesso", + "categories": { + "categories_list": "Lista de Categorias", + "title": "Título", + "name": "Nome", + "description": "Descrição", + "amount": "Montante", + "actions": "Ações", + "add_category": "Adicionar Categoria", + "new_category": "Nova Categoria", + "category": "Categoria | Categorias", + "select_a_category": "Selecionar uma Categoria" + } + }, + "login": { + "email": "Email", + "password": "Senha", + "forgot_password": "Esqueceu a senha?", + "or_signIn_with": "ou Entre com", + "login": "Entrar", + "register": "Registre-se", + "reset_password": "Resetar Senha", + "password_reset_successfully": "Senha redefinida com sucesso", + "enter_email": "Digite email", + "enter_password": "Digite a senha", + "retype_password": "Confirme a Senha" + }, + "users": { + "title": "Users", + "users_list": "Users List", + "name": "Nome", + "description": "Descrição", + "added_on": "Adicionado", + "date_of_creation": "Data de criação", + "action": "Ação", + "add_user": "Add User", + "save_user": "Save User", + "update_user": "Update User", + "user": "User | Users", + "add_new_user": "Add New User", + "new_user": "New User", + "edit_user": "Edit User", + "no_users": "No users yet!", + "list_of_users": "This section will contain the list of users.", + "email": "Email", + "phone": "Telefone", + "password": "Senha", + "user_attached_message": "Não é possível excluir um item que já está em uso.", + "confirm_delete": "You will not be able to recover this User | You will not be able to recover these Users", + "created_message": "User created successfully", + "updated_message": "User updated successfully", + "deleted_message": "User deleted successfully | User deleted successfully" + }, + "reports": { + "title": "Relatório", + "from_date": "A partir da Data", + "to_date": "Até a Data", + "status": "Status", + "paid": "Pago", + "unpaid": "Não Pago", + "download_pdf": "Baixar PDF", + "view_pdf": "Ver PDF", + "update_report": "Atualizar Relatório", + "report": "Relatório | Relatórios", + "profit_loss": { + "profit_loss": "Perda de lucro", + "to_date": "Até a Data", + "from_date": "A partir da Data", + "date_range": "Selecionar período" + }, + "sales": { + "sales": "Vendas", + "date_range": "Selecionar período", + "to_date": "Até a Data", + "from_date": "A partir da Data", + "report_type": "Tipo de Relatório" + }, + "taxes": { + "taxes": "Impostos", + "to_date": "Até a Data", + "from_date": "A partir da Data", + "date_range": "Selecionar período" + }, + "errors": { + "required": "Campo obrigatório" + }, + "invoices": { + "invoice": "Fatura", + "invoice_date": "Data da Fatura", + "due_date": "Data de Vencimento", + "amount": "Montante", + "contact_name": "Nome de Contato", + "status": "Status" + }, + "estimates": { + "estimate": "Orçamento", + "estimate_date": "Data do Orçamento", + "due_date": "Data de Vencimento", + "estimate_number": "Número do Orçamento", + "ref_number": "Referência", + "amount": "Montante", + "contact_name": "Nome de Contato", + "status": "Status" + }, + "expenses": { + "expenses": "Despesas", + "category": "Categoria", + "date": "Data", + "amount": "Montante", + "to_date": "Até a Data", + "from_date": "A partir da Data", + "date_range": "Selecionar período" + } + }, + "settings": { + "menu_title": { + "account_settings": "Configurações da conta", + "company_information": "Informações da Empresa", + "customization": "Personalizar", + "preferences": "Preferências", + "notifications": "Notificações", + "tax_types": "Tipos de Impostos", + "expense_category": "Categorias de Despesas", + "update_app": "Atualizar Aplicativo", + "backup": "Backup", + "file_disk": "File Disk", + "custom_fields": "Os campos personalizados", + "payment_modes": "Payment Modes", + "notes": "Observações" + }, + "title": "Configurações", + "setting": "Configuração | Configurações", + "general": "Geral", + "language": "Idioma", + "primary_currency": "Moéda Principal", + "timezone": "Fuso horário", + "date_format": "Formato de data", + "currencies": { + "title": "Moedas", + "currency": "Moeda | Moedas", + "currencies_list": "Moedas", + "select_currency": "Selecione uma Moeda", + "name": "Nome", + "code": "Código", + "symbol": "Símbolo", + "precision": "Precisão", + "thousand_separator": "Separador de Milhar", + "decimal_separator": "Separador Decimal", + "position": "Posição", + "position_of_symbol": "Posição do Símbolo", + "right": "Direita", + "left": "Esquerda", + "action": "Ação", + "add_currency": "Adicionar Moeda" + }, + "mail": { + "host": "Host de Email", + "port": "Porta de Email", + "driver": "Driver do email", + "secret": "Segredo", + "mailgun_secret": "Mailgun Segredo", + "mailgun_domain": "Domínio", + "mailgun_endpoint": "Endpoint do Mailgun", + "ses_secret": "SES Segredo", + "ses_key": "SES Chave", + "password": "Senha do Email", + "username": "Nome de Usuário do Email", + "mail_config": "Configuração de Email", + "from_name": "Do Nome de Email", + "from_mail": "Do Endereço de Email", + "encryption": "Criptografia de Email", + "mail_config_desc": "Abaixo está o formulário para configurar o driver de email para enviar emails do aplicativo. Você também pode configurar provedores de terceiros como Sendgrid, SES etc." + }, + "pdf": { + "title": "Configurações de PDF", + "footer_text": "Texto do Rodapé", + "pdf_layout": "Layout de PDF" + }, + "company_info": { + "company_info": "Informação da Empresa", + "company_name": "Nome da Empresa", + "company_logo": "Logotipo da Empresa", + "section_description": "Informações sobre sua empresa que serão exibidas em Faturas, Orçamentos e outros documentos criados pela Crater.", + "phone": "Telefone", + "country": "Pais", + "state": "Estado", + "city": "Cidade", + "address": "Endereço", + "zip": "CEP", + "save": "Salvar", + "updated_message": "Informações da Empresa atualizadas com sucesso" + }, + "custom_fields": { + "title": "Os campos personalizados", + "section_description": "Customize your Invoices, Estimates & Payment Receipts with your own fields. Make sure to use the below added fields on the address formats on Customization settings page.", + "add_custom_field": "Adicionar campo personalizado", + "edit_custom_field": "Editar campo personalizado", + "field_name": "Nome do campo", + "label": "Rótulo", + "type": "Tipo", + "name": "Nome", + "required": "Requeridas", + "placeholder": "Placeholder", + "help_text": "Texto de ajuda", + "default_value": "Valor padrão", + "prefix": "Prefixo", + "starting_number": "Número inicial", + "model": "Modelo", + "help_text_description": "Digite algum texto para ajudar os usuários a entender a finalidade desse campo personalizado.", + "suffix": "Sufixo", + "yes": "sim", + "no": "Não", + "order": "Ordem", + "custom_field_confirm_delete": "Você não poderá recuperar este campo personalizado", + "already_in_use": "O campo personalizado já está em uso", + "deleted_message": "Campo personalizado excluído com sucesso", + "options": "opções", + "add_option": "Adicionar opções", + "add_another_option": "Adicione outra opção", + "sort_in_alphabetical_order": "Classificar em ordem alfabética", + "add_options_in_bulk": "Adicionar opções em massa", + "use_predefined_options": "Use Predefined Options", + "select_custom_date": "Selecionar data personalizada", + "select_relative_date": "Selecionar data relativa", + "ticked_by_default": "Marcado por padrão", + "updated_message": "Campo personalizado atualizado com sucesso", + "added_message": "Campo personalizado adicionado com sucesso" + }, + "customization": { + "customization": "Personalizar", + "save": "Salvar", + "addresses": { + "title": "Endereço", + "section_description": "Você pode definir o endereço de cobrança do cliente e o formato do endereço de entrega do cliente (exibido apenas em PDF).", + "customer_billing_address": "Endereço de Cobrança do Cliente", + "customer_shipping_address": "Endereço de Entrega do Cliente", + "company_address": "Endereço da Empresa", + "insert_fields": "Inserir Campos", + "contact": "Contato", + "address": "Endereço", + "display_name": "Nome em Exibição", + "primary_contact_name": "Nome do Contato Principal", + "email": "Email", + "website": "Site", + "name": "Nome", + "country": "Pais", + "state": "Estado", + "city": "Cidade", + "company_name": "Nome da Empresa", + "address_street_1": "Endereço Rua 1", + "address_street_2": "Endereço Rua 2", + "phone": "Telefone", + "zip_code": "CEP", + "address_setting_updated": "Configuração de Endereço Atualizada com Sucesso" + }, + "updated_message": "Informações da Empresa atualizadas com sucesso", + "invoices": { + "title": "Faturas", + "notes": "Notas", + "invoice_prefix": "Fatura Prefixo", + "default_invoice_email_body": "Default Invoice Email Body", + "invoice_settings": "Configrações da Fatura", + "autogenerate_invoice_number": "Gerar automaticamente o número da Fatura", + "autogenerate_invoice_number_desc": "Desative isso, se você não deseja gerar automaticamente números da Fatura sempre que criar uma nova.", + "enter_invoice_prefix": "Digite o prefixo da Fatura", + "terms_and_conditions": "Termos e Condições", + "company_address_format": "Company Address Format", + "shipping_address_format": "Shipping Address Format", + "billing_address_format": "Billing Address Format", + "invoice_settings_updated": "Configuração da Fatura atualizada com sucesso" + }, + "estimates": { + "title": "Orçamentos", + "estimate_prefix": "Orçamento Prefixo", + "default_estimate_email_body": "Default Estimate Email Body", + "estimate_settings": "Configurações do Orçamento", + "autogenerate_estimate_number": "Gerar automaticamente o número do Orçamento", + "estimate_setting_description": "Desative isso, se você não deseja gerar automaticamente números do Orçamento sempre que criar um novo.", + "enter_estimate_prefix": "Digite o prefixo do Orçamento", + "estimate_setting_updated": "Configuração do Orçamento atualizada com sucesso", + "company_address_format": "Company Address Format", + "billing_address_format": "Billing Address Format", + "shipping_address_format": "Shipping Address Format" + }, + "payments": { + "title": "Pagamentos", + "description": "Modes of transaction for payments", + "payment_prefix": "Pagamento Prefixo", + "default_payment_email_body": "Default Payment Email Body", + "payment_settings": "Configurações de Pagamento", + "autogenerate_payment_number": "Gerar automaticamente número do Pagamento", + "payment_setting_description": "Desative isso, se você não deseja gerar automaticamente números do Pagamento sempre que criar um novo.", + "enter_payment_prefix": "Digite o Prefixo do Pagamento", + "payment_setting_updated": "Configurações de Pagamento atualizada com sucesso", + "payment_modes": "Payment Modes", + "add_payment_mode": "Adicionar modo de pagamento", + "edit_payment_mode": "Editar modo de pagamento", + "mode_name": "Nome do modo", + "payment_mode_added": "Modo de pagamento adicionado", + "payment_mode_updated": "Modo de pagamento atualizado", + "payment_mode_confirm_delete": "Você não poderá recuperar este modo de pagamento", + "already_in_use": "O modo de pagamento já está em uso", + "deleted_message": "Modo de pagamento excluído com sucesso", + "company_address_format": "Company Address Format", + "from_customer_address_format": "From Customer Address Format" + }, + "items": { + "title": "Itens", + "units": "unidades", + "add_item_unit": "Adicionar unidade de item", + "edit_item_unit": "Editar unidade de item", + "unit_name": "Nome da unidade", + "item_unit_added": "Item Unit Added", + "item_unit_updated": "Item Unit Updated", + "item_unit_confirm_delete": "Você não poderá recuperar esta unidade de item", + "already_in_use": "A unidade do item já está em uso", + "deleted_message": "Unidade de item excluída com sucesso" + }, + "notes": { + "title": "Observações", + "description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", + "notes": "Observações", + "type": "Tipo", + "add_note": "Add Note", + "add_new_note": "Add New Note", + "name": "Nome", + "edit_note": "Edit Note", + "note_added": "Note added successfully", + "note_updated": "Note Updated successfully", + "note_confirm_delete": "You will not be able to recover this Note", + "already_in_use": "Note is already in use", + "deleted_message": "Note deleted successfully" + } + }, + "account_settings": { + "profile_picture": "Foto do Perfil", + "name": "Nome", + "email": "Email", + "password": "Senha", + "confirm_password": "Confirmar Senha", + "account_settings": "Configurações da conta", + "save": "Salvar", + "section_description": "Você pode atualizar seu nome, email e senha usando o formulário abaixo.", + "updated_message": "Configurações da conta atualizadas com sucesso" + }, + "user_profile": { + "name": "Nome", + "email": "Email", + "password": "Senha", + "confirm_password": "Confirmar Senha" + }, + "notification": { + "title": "Notificação", + "email": "Enviar Notificações para", + "description": "Quais notificações por email você gostaria de receber quando algo mudar?", + "invoice_viewed": "Fatura Visualizada", + "invoice_viewed_desc": "Quando o seu cliente visualiza uma Fatura enviada pelo painel do Crater.", + "estimate_viewed": "Orçamento Visualizado", + "estimate_viewed_desc": "Quando o seu cliente visualiza um Orçamento enviada pelo painel do Crater.", + "save": "Salvar", + "email_save_message": "E-mail salvo com sucesso", + "please_enter_email": "Por favor digite um E-mail" + }, + "tax_types": { + "title": "Tipos de Impostos", + "add_tax": "Adicionar Imposto", + "edit_tax": "Editar imposto", + "description": "Você pode adicionar ou remover impostos conforme desejar. O Crater suporta impostos sobre itens individuais e também na Fatura.", + "add_new_tax": "Adicionar Novo Imposto", + "tax_settings": "Configurações de Impostos", + "tax_per_item": "Imposto por Item", + "tax_name": "Nome do Imposto", + "compound_tax": "Imposto Composto", + "percent": "Porcentagem", + "action": "Ação", + "tax_setting_description": "Habilite isso se desejar adicionar Impostos a itens da Fatura Idividualmente. Por padrão, os impostos são adicionados diretamente à Fatura.", + "created_message": "Tipo de Imposto criado com sucesso", + "updated_message": "Tipo de Imposto Atualizado com sucesso", + "deleted_message": "Tipo de Imposto Deletado com sucesso", + "confirm_delete": "Você não poderá recuperar este tipo de Imposto", + "already_in_use": "O Imposto já está em uso" + }, + "expense_category": { + "title": "Categoria de Despesa", + "action": "Ação", + "description": "As Categorias são necessárias para adicionar entradas de Despesas. Você pode adicionar ou remover essas Categorias de acordo com sua preferência.", + "add_new_category": "Adicionar Nova Categoria", + "add_category": "Adicionar categoria", + "edit_category": "Editar categoria", + "category_name": "Nome da Categoria", + "category_description": "Descrição", + "created_message": "Categoria de Despesa criada com sucesso", + "deleted_message": "Categoria de Despesa excluída com sucesso", + "updated_message": "Categoria de Despesa atualizada com sucesso", + "confirm_delete": "Você não poderá recuperar esta Categoria de Despesa", + "already_in_use": "A categoria já está em uso" + }, + "preferences": { + "currency": "Moeda", + "default_language": "Default Language", + "time_zone": "Fuso Horário", + "fiscal_year": "Ano Financeiro", + "date_format": "Formato da Data", + "discount_setting": "Configuração de Desconto", + "discount_per_item": "Desconto por Item ", + "discount_setting_description": "Habilite isso se desejar adicionar desconto a itens de Fatura individualmente. Por padrão, o desconto é adicionado diretamente à Fatura.", + "save": "Salvar", + "preference": "Preferência | Preferências", + "general_settings": "Preferências padrão para o sistema.", + "updated_message": "Preferências atualizadas com sucesso", + "select_language": "Selecione um Idioma", + "select_time_zone": "Selecione um fuso horário", + "select_date_format": "Select Date Format", + "select_financial_year": "Selecione o ano financeiro" + }, + "update_app": { + "title": "Atualizar Aplicativo", + "description": "Você pode atualizar facilmente o Crater, verifique se hà novas atualizações, clicando no botão abaixo", + "check_update": "Verifique se há atualizações", + "avail_update": "Nova atualização disponível", + "next_version": "Próxima versão", + "requirements": "Requirements", + "update": "Atualizar agora", + "update_progress": "Atualização em progresso...", + "progress_text": "Levará apenas alguns minutos. Não atualize a tela ou feche a janela antes que a atualização seja concluída", + "update_success": "O aplicativo foi atualizado! Aguarde enquanto a janela do navegador é recarregada automaticamente.", + "latest_message": "Nenhuma atualização disponível! Você está na versão mais recente.", + "current_version": "Versão Atual", + "download_zip_file": "Baixar arquivo ZIP", + "unzipping_package": "Descompactando o pacote", + "copying_files": "Copiando arquivos", + "running_migrations": "Executando migrações", + "finishing_update": "Atualização de acabamento", + "update_failed": "Atualização falhou", + "update_failed_text": "Desculpa! Sua atualização falhou em: {step} step" + }, + "backup": { + "title": "Backup | Backups", + "description": "The backup is a zipfile that contains all files in the directories you specify along with a dump of your database", + "new_backup": "Add New Backup", + "create_backup": "Create Backup", + "select_backup_type": "Select Backup Type", + "backup_confirm_delete": "You will not be able to recover this Backup", + "path": "Caminho", + "new_disk": "Novo disco", + "created_at": "Criado em", + "size": "Tamanho", + "dropbox": "DropBox", + "local": "local", + "healthy": "healthy", + "amount_of_backups": "Quantidade de backups", + "newest_backups": "Backups mais recentes", + "used_storage": "used storage", + "select_disk": "Select Disk", + "action": "Ação", + "deleted_message": "Backup deleted successfully", + "created_message": "Backup created successfully", + "invalid_disk_credentials": "Invalid credential of selected disk" + }, + "disk": { + "title": "File Disk | File Disks", + "description": "By default, Crater will use your local disk for saving backups, avatar and other image files. You can configure more than one disk drivers like DigitalOcean, S3 and Dropbox according to your preference.", + "created_at": "Criado em", + "dropbox": "DropBox", + "name": "Nome", + "driver": "Driver", + "disk_type": "Tipo", + "disk_name": "Nome do disco", + "new_disk": "Adicionar novo disco", + "filesystem_driver": "Filesystem Driver", + "local_driver": "local Driver", + "local_root": "local Root", + "public_driver": "Public Driver", + "public_root": "Public Root", + "public_url": "Public URL", + "public_visibility": "Public Visibility", + "media_driver": "Media Driver", + "media_root": "Media Root", + "aws_driver": "Driver AWS", + "aws_key": "Chave AWS", + "aws_secret": "Segredo AWS", + "aws_region": "Região AWS", + "aws_bucket": "AWS Bucket", + "aws_root": "AWS Root", + "do_spaces_type": "Do Spaces type", + "do_spaces_key": "Do Spaces key", + "do_spaces_secret": "Do Spaces Secret", + "do_spaces_region": "Do Spaces Region", + "do_spaces_bucket": "Do Spaces Bucket", + "do_spaces_endpoint": "Do Spaces Endpoint", + "do_spaces_root": "Do Spaces Root", + "dropbox_type": "Dropbox Type", + "dropbox_token": "Dropbox Token", + "dropbox_key": "Dropbox Key", + "dropbox_secret": "Dropbox Secret", + "dropbox_app": "Dropbox App", + "dropbox_root": "Dropbox Root", + "default_driver": "Default Driver", + "is_default": "IS DEFAULT", + "set_default_disk": "Set Default Disk", + "success_set_default_disk": "Disk set as default successfully", + "save_pdf_to_disk": "Save PDFs to Disk", + "disk_setting_description": " Enable this, if you wish to save a copy of each Invoice, Estimate & Payment Receipt PDF on your default disk automatically. Turning this option will decrease the load-time when viewing the PDFs.", + "select_disk": "Select Disk", + "disk_settings": "Disk Settings", + "confirm_delete": "Your existing files & folders in the specified disk will not be affected but your disk configuration will be deleted from Crater", + "action": "Ação", + "edit_file_disk": "Edit File Disk", + "success_create": "Disk added successfully", + "success_update": "Disk updated successfully", + "error": "Disk addition failed", + "deleted_message": "File Disk deleted successfully", + "disk_variables_save_successfully": "Disk Configured Successfully", + "disk_variables_save_error": "Disk configuration failed.", + "invalid_disk_credentials": "Invalid credential of selected disk" + } + }, + "wizard": { + "account_info": "Informação da conta", + "account_info_desc": "Os detalhes abaixo serão usados para criar a conta principal do administrador. Além disso, você pode alterar os detalhes a qualquer momento após o login.", + "name": "Nome", + "email": "Email", + "password": "Senha", + "confirm_password": "Confirmar Senha", + "save_cont": "Salvar e Continuar", + "company_info": "Informação da Empresa", + "company_info_desc": "Esta informação será exibida nas Faturas. Observe que você pode editar isso mais tarde na página de configurações.", + "company_name": "Nome da Empresa", + "company_logo": "Logotipo da Empresa", + "logo_preview": "Previsualizar Logotipo", + "preferences": "Preferências", + "preferences_desc": "Preferências padrão para o sistema.", + "country": "Pais", + "state": "Estado", + "city": "Cidade", + "address": "Endereço", + "street": "Rua 1 | Rua 2", + "phone": "Telefone", + "zip_code": "CEP", + "go_back": "Voltar", + "currency": "Moeda", + "language": "Idioma", + "time_zone": "Fuso Horário", + "fiscal_year": "Ano Financeiro", + "date_format": "Formato de Data", + "from_address": "Do Endereço", + "username": "Nome de Usuário", + "next": "Próximo", + "continue": "Continuar", + "skip": "Pular", + "database": { + "database": "URL do Site e Base de Dados", + "connection": "Conexão da Base de Dados", + "host": "Host da Base de Dados", + "port": "Porta da Base de Dados", + "password": "Senha da Base de Dados", + "app_url": "URL do Aplicativo", + "app_domain": "App Domain", + "username": "Usuário da Base de Dados", + "db_name": "Nome da Base de Dados", + "db_path": "Database Path", + "desc": "Crie um Banco de Dados no seu servidor e defina as credenciais usando o formulário abaixo." + }, + "permissions": { + "permissions": "Permissões", + "permission_confirm_title": "Você tem certeza que quer continuar?", + "permission_confirm_desc": "Falha na verificação de permissão da pasta", + "permission_desc": "Abaixo está a lista de permissões de pasta que são necessárias para que o aplicativo funcione. Se a verificação da permissão falhar, atualize as permissões da pasta." + }, + "mail": { + "host": "Host do email", + "port": "Porta do email", + "driver": "Driver do email", + "secret": "Segredo", + "mailgun_secret": "Segredo do Mailgun", + "mailgun_domain": "Domínio", + "mailgun_endpoint": "Endpoint do Mailgun", + "ses_secret": "Segredo do SES", + "ses_key": "Chave SES", + "password": "Senha do email", + "username": "Nome do Usuário do email", + "mail_config": "Configuração de email", + "from_name": "Nome do email", + "from_mail": "Endereço de email", + "encryption": "Criptografia de email", + "mail_config_desc": "Abaixo está o formulário para configurar o driver de email que será usado para enviar emails do aplicativo. Você também pode configurar provedores de terceiros como Sendgrid, SES etc." + }, + "req": { + "system_req": "Requisitos de Sistema", + "php_req_version": "PHP (versão {version} obrigatória)", + "check_req": "Verificar Requisitos", + "system_req_desc": "O Crater tem alguns requisitos de servidor. Verifique se o seu servidor possui a versão do PHP necessária e todas as extensões mencionadas abaixo." + }, + "errors": { + "migrate_failed": "Falha na migração", + "database_variables_save_error": "Não é possível gravar a configuração no arquivo .env. Por favor, verifique suas permissões de arquivo", + "mail_variables_save_error": "A configuração do email falhou.", + "connection_failed": "Falha na conexão com o banco de dados", + "database_should_be_empty": "O banco de dados deve estar vazio" + }, + "success": { + "mail_variables_save_successfully": "Email configurado com sucesso", + "database_variables_save_successfully": "Banco de dados configurado com sucesso." + } + }, + "validation": { + "invalid_phone": "Número de telefone inválido", + "invalid_url": "url inválidas (ex: http://www.craterapp.com)", + "invalid_domain_url": "url inválidas (ex: craterapp.com)", + "required": "Campo obrigatório", + "email_incorrect": "E-mail incorreto", + "email_already_taken": "O email já foi recebido.", + "email_does_not_exist": "O usuário com determinado email não existe", + "item_unit_already_taken": "This item unit name has already been taken", + "payment_mode_already_taken": "This payment mode name has already been taken", + "send_reset_link": "Enviar link de redefinição", + "not_yet": "Ainda não? Envie novamente", + "password_min_length": "A senha deve conter {count} caracteres", + "name_min_length": "O nome deve ter pelo menos {count} letras.", + "enter_valid_tax_rate": "Insira uma taxa de imposto válida", + "numbers_only": "Apenas Números.", + "characters_only": "Apenas Caracteres.", + "password_incorrect": "As senhas devem ser idênticas", + "password_length": "A senha deve ter {count} caracteres.", + "qty_must_greater_than_zero": "A quantidade deve ser maior que zero.", + "price_greater_than_zero": "O preço deve ser maior que zero.", + "payment_greater_than_zero": "O pagamento deve ser maior que zero.", + "payment_greater_than_due_amount": "O pagamento inserido é mais do que o valor devido desta fatura.", + "quantity_maxlength": "A quantidade não deve exceder 20 dígitos.", + "price_maxlength": "O preço não deve ser superior a 20 dígitos.", + "price_minvalue": "O preço deve ser maior que 0.", + "amount_maxlength": "Montante não deve ser superior a 20 dígitos.", + "amount_minvalue": "Montante deve ser maior que zero", + "description_maxlength": "A descrição não deve ter mais que 255 caracteres.", + "subject_maxlength": "Subject should not be greater than 100 characters.", + "message_maxlength": "Message should not be greater than 255 characters.", + "maximum_options_error": "Máximo de {max} opções selecionadas. Primeiro remova uma opção selecionada para selecionar outra.", + "notes_maxlength": "As anotações não devem ter mais que 255 caracteres.", + "address_maxlength": "O endereço não deve ter mais que 255 caracteres.", + "ref_number_maxlength": "O número de referência não deve ter mais que 255 caracteres.", + "prefix_maxlength": "O prefixo não deve ter mais que 5 caracteres.", + "something_went_wrong": "Algo deu errado" + }, + "pdf_estimate_label": "Orçamento", + "pdf_estimate_number": "Numero do Orçamento", + "pdf_estimate_date": "Data do Orçamento", + "pdf_estimate_expire_date": "Expiry date", + "pdf_invoice_label": "Fatura", + "pdf_invoice_number": "Número da fatura", + "pdf_invoice_date": "Data da Fatura", + "pdf_invoice_due_date": "Due date", + "pdf_notes": "Observações", + "pdf_items_label": "Itens", + "pdf_quantity_label": "Quantidade", + "pdf_price_label": "Preço", + "pdf_discount_label": "Desconto", + "pdf_amount_label": "Montante", + "pdf_subtotal": "Subtotal", + "pdf_total": "Total", + "pdf_payment_label": "Payment", + "pdf_payment_receipt_label": "PAYMENT RECEIPT", + "pdf_payment_date": "Payment Date", + "pdf_payment_number": "Número do Pagamento", + "pdf_payment_mode": "Forma de Pagamento", + "pdf_payment_amount_received_label": "Amount Received", + "pdf_expense_report_label": "EXPENSES REPORT", + "pdf_total_expenses_label": "TOTAL EXPENSE", + "pdf_profit_loss_label": "PROFIT & LOSS REPORT", + "pdf_sales_customers_label": "Sales Customer Report", + "pdf_sales_items_label": "Sales Item Report", + "pdf_tax_summery_label": "Tax Summary Report", + "pdf_income_label": "INCOME", + "pdf_net_profit_label": "NET PROFIT", + "pdf_customer_sales_report": "Sales Report: By Customer", + "pdf_total_sales_label": "TOTAL SALES", + "pdf_item_sales_label": "Sales Report: By Item", + "pdf_tax_report_label": "TAX REPORT", + "pdf_total_tax_label": "TOTAL TAX", + "pdf_tax_types_label": "Tipos de Impostos", + "pdf_expenses_label": "Despesas", + "pdf_bill_to": "Cobrar a,", + "pdf_ship_to": "Envie a,", + "pdf_received_from": "Received from:", + "pdf_tax_label": "Tax" +} diff --git a/resources/assets/js/plugins/sk.json b/resources/scripts/locales/sk.json similarity index 92% rename from resources/assets/js/plugins/sk.json rename to resources/scripts/locales/sk.json index 361db3866..1498a5a93 100644 --- a/resources/assets/js/plugins/sk.json +++ b/resources/scripts/locales/sk.json @@ -86,8 +86,7 @@ "retry": "Skúsiť znova", "choose_note": "Vyberte poznámku", "no_note_found": "Neboli nájdené žiadne poznámky", - "insert_note": "Vlož poznámku", - "copied_pdf_url_clipboard": "Copied PDF url to clipboard!" + "insert_note": "Vlož poznámku" }, "dashboard": { "select_year": "Vyberte rok", @@ -104,9 +103,6 @@ "net_income": "Čistý príjem", "year": "Vyberte rok" }, - "weekly_invoices": { - "title": "Týždenné Faktúry" - }, "monthly_chart": { "title": "Predaje a Výdaje" }, @@ -178,8 +174,6 @@ "copy_billing_address": "Kopírovať podľa Fakturačnej adresy", "no_customers": "Zatiaľ nebol pridaný žiadny zákazník!", "no_customers_found": "Nenájdení žiadni zákazníci!", - "no_contact": "No contact", - "no_contact_name": "No contact name", "list_of_customers": "Táto sekcia bude obsahovať zoznam zákazníkov.", "primary_display_name": "Hlavné meno pre zobrazenie", "select_currency": "Vyberte menu", @@ -203,7 +197,6 @@ "added_on": "Pridané Dňa", "price": "Cena", "date_of_creation": "Dátum Vytvorenia", - "not_selected": "No item selected", "action": "Akcia", "add_item": "Pridať Položku", "save_item": "Uložiť Položku", @@ -274,7 +267,6 @@ "required": "Pole je povinné" }, "accepted": "Prijátá", - "rejected": "Rejected", "sent": "Odoslaná", "draft": "Koncept", "declined": "Zrušený", @@ -295,7 +287,6 @@ "created_message": "Cenový odhad úspešné vytvorený", "updated_message": "Cenový odhad úspešné aktualizovaný", "deleted_message": "Cenový odhad úspešné vymazaný | Cenové odhady úspešné vymazané", - "user_email_does_not_exist": "Neexistujúca emailová adresa", "something_went_wrong": "Niečo neprebehlo v poriadku, odskúšajte prosím znova.", "item": { "title": "Názov Položky", @@ -321,9 +312,6 @@ "all": "Všetko", "paid": "Zaplatené", "unpaid": "Nezaplatené", - "viewed": "Viewed", - "overdue": "Overdue", - "completed": "Completed", "customer": "ZÁKAZNÍK", "paid_status": "Stav platby", "ref_no": "REF Č.", @@ -368,7 +356,7 @@ "select_invoice": "Vybrať Faktúru", "no_matching_invoices": "Nenašli sa žiadne faktúry!", "mark_as_sent_successfully": "Faktúra označená ako úspešne odoslaná", - "send_invoice_successfully": "Faktúra bola úspešne odoslaná", + "invoice_sent_successfully": "Faktúra bola úspešne odoslaná", "cloned_successfully": "Faktúra bola úspešne okopírovaná", "clone_invoice": "Kopírovať faktúru", "confirm_clone": "Faktúra bude okopírovaná do novej", @@ -386,39 +374,14 @@ "select_an_item": "Napíšte alebo vyberte položku", "type_item_description": "Popis položky (voliteľné)" }, - "payment_attached_message": "K jednej z vybraných faktúr už je pripojená platba. Nezabudnite najskôr vymazať priložené platby, aby ste mohli pokračovať v odstránení", "confirm_delete": "Túto faktúru nebude možné obnoviť | Tieto faktúry nebude možné obnoviť", "created_message": "Faktúra úspešne vytvorená", "updated_message": "Faktúra úspešne aktualizovaná", "deleted_message": "Faktúra úspešne vymazaná | Faktúry úspešne vymazané", "marked_as_sent_message": "Faktúra úspešne označená ako odoslaná", - "user_email_does_not_exist": "Emailová adresa neexistuje", "something_went_wrong": "Niečo neprebehlo v poriadku, odskúšajte prosím znova.", "invalid_due_amount_message": "Celková suma faktúry nemôže byť nižšia ako celková suma zaplatená za túto faktúru. Ak chcete pokračovať, aktualizujte faktúru alebo odstráňte súvisiace platby." }, - "credit_notes": { - "title": "Dobropisy", - "credit_notes_list": "Zoznam dobropisov", - "credit_notes": "Poznámky k dobropisom", - "contact": "Kontakt", - "date": "Dátum", - "amount": "Suma", - "action": "Akcia", - "credit_number": "Číslo dobropisu", - "notes": "Poznámky", - "confirm_delete": "Chcete zmazat tento dobropis?", - "item": { - "title": "Názov Položky", - "description": "Popis", - "quantity": "Množstvo", - "price": "Cena", - "discount": "Zľava", - "total": "Celkom", - "total_discount": "Celková Zľava", - "sub_total": "Medzisúčet", - "tax": "Daň" - } - }, "payments": { "title": "Platby", "payments_list": "Zoznam Platieb", @@ -442,15 +405,12 @@ "update_payment": "Úpraviť Platbu", "payment": "Platba | Platby", "no_payments": "Zatiaľ nemáte žiadne platby!", - "not_selected": "Not selected", - "no_invoice": "No invoice", "no_matching_payments": "Nenašli sa žiadne platby spĺňajúce Vaše podmienky!", "list_of_payments": "Táto sekcia bude obsahovať zoznam platieb.", "select_payment_mode": "Vyberte spôsob platby", "confirm_mark_as_sent": "Tento cenový odhad bude označený ako odoslaný", "confirm_send_payment": "Tento cenový odhad bude odoslaný zákazníkovi prostredníctvom e-mailu", "send_payment_successfully": "Platba úspešne odoslaná", - "user_email_does_not_exist": "Používateľ s týmto e-mailom neexistuje", "something_went_wrong": "Niečo neprebehlo v poriadku, odskúšajte prosím znova.", "confirm_delete": "Nebudete môcť obnoviť túto Platbu | Nebudete môcť obnoviť tieto Platby", "created_message": "Platba úspešne vytvorená", @@ -473,7 +433,6 @@ "receipt": "Doklad o zaplatení", "amount": "Suma", "action": "Akcia", - "not_selected": "Not selected", "note": "Poznámka", "category_id": "ID kategórie", "date": "Dátum", @@ -515,8 +474,7 @@ "password_reset_successfully": "Heslo Úspešne Obnovené", "enter_email": "Zadajte e-mail", "enter_password": "Zadajte heslo", - "retype_password": "Znova zadajte heslo", - "login_placeholder": "email@priklad.sk" + "retype_password": "Znova zadajte heslo" }, "users": { "title": "Uživatelia", @@ -751,30 +709,24 @@ "title": "Faktúry", "notes": "Poznámky", "invoice_prefix": "Predpona Faktúry", - "invoice_number_length": "Invoice number length", "default_invoice_email_body": "Prednastavené telo e-mailu faktúry", "invoice_settings": "Nastavenia Faktúry", "autogenerate_invoice_number": "Automaticky Vygenerovať Číslo Faktúry", - "invoice_setting_description": "Ak si neprajete automaticky generovať číslo novej faktúry, vypnite túto možnosť.", - "invoice_email_attachment": "Send invoices as attachments", - "invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.", + "autogenerate_invoice_number_desc": "Ak si neprajete automaticky generovať číslo novej faktúry, vypnite túto možnosť.", "enter_invoice_prefix": "Zadajte predponu faktúry", "terms_and_conditions": "Podmienky používania", "company_address_format": "Formát firemnej adresy", "shipping_address_format": "Formát doručovacej adresy", "billing_address_format": "Formát fakturačnej adresy", - "invoice_setting_updated": "Nastavenia faktúr boli úspešne aktualizované" + "invoice_settings_updated": "Nastavenia faktúr boli úspešne aktualizované" }, "estimates": { "title": "Cenový odhad", "estimate_prefix": "Predpona cenového odhadu", - "estimate_number_length": "Estimate number length", "default_estimate_email_body": "Prednastavené telo e-mailu cenového dohadu", "estimate_settings": "Nastavenia cenových odhadov", "autogenerate_estimate_number": "Automaticky generovať číslo cenového odhadu", "estimate_setting_description": "Zakážte to, ak si neprajete automaticky generovať čísla cenovych odhadov zakaždým, keď vytvoríte nový odhad.", - "estimate_email_attachment": "Send estimates as attachments", - "estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.", "enter_estimate_prefix": "Vložte prepdonu cenového odhadu", "estimate_setting_updated": "Nastavenia cenových odhadov úspešne aktualizované", "company_address_format": "Formát firemnej adresy", @@ -785,13 +737,10 @@ "title": "Platby", "description": "Možnosti platieb", "payment_prefix": "Predpona platby", - "payment_number_length": "Payment number lenght", "default_payment_email_body": "Prednastavené telo e-mailu platby", "payment_settings": "Nastavenia Platieb", "autogenerate_payment_number": "Automaticky generovať číslo platby", "payment_setting_description": "Zakážte to, ak si neprajete automaticky generovať čísla platieb zakaždým, keď vytvoríte novú platbu.", - "payment_email_attachment": "Send payments as attachments", - "payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.", "enter_payment_prefix": "Vložit Predponu Platby", "payment_setting_updated": "Nastavenia platieb úspešne aktualizované", "payment_modes": "Typy Platieb", @@ -904,7 +853,7 @@ "fiscal_year": "Fiškálny Rok", "date_format": "Formát Dátumu", "discount_setting": "Nastavenia Zľavy", - "discount_per_item": "Zľava pre každú Položku zvlášť ", + "discount_per_item": "Zľava pre každú Položku zvlášť", "discount_setting_description": "Túto možnosť povoľte, ak chcete pridať zľavu k jednotlivým položkám faktúry. Štandardne sa zľava pripočítava priamo k faktúre.", "save": "Uložiť", "preference": "Preferencie | Preferencie", @@ -931,7 +880,6 @@ "download_zip_file": "Stiahnuť ZIP súbor", "unzipping_package": "Rozbaliť balík", "copying_files": "Kopírovanie súborov", - "deleting_files": "Deleting Unused files", "running_migrations": "Prebieha Migrácia", "finishing_update": "Ukončovanie Aktualizácie", "update_failed": "Aktualizácia zlyhala!", @@ -1001,7 +949,6 @@ "default_driver": "Predvolený Driver", "is_default": "Je predvolený", "set_default_disk": "Nastaviť predvolený disk", - "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk", "success_set_default_disk": "Disk úspešne nastavený ako predvolený", "save_pdf_to_disk": "Ulož PDFs na Disk", "disk_setting_description": "Túto možnosť povoľte ak si chcete automaticky uložiť kópiu každého súboru PDF s fakturami, odhadmi a príjmami na predvolený disk. Použitím tejto možnosti skrátite dobu načítania pri prezeraní súborov PDF.", @@ -1107,18 +1054,10 @@ "database_variables_save_successfully": "Databáza úspešne nakonfigurovaná." } }, - "layout_login": { - "copyright_crater": "Autorské práva @ Crater - 2020", - "super_simple_invoicing": "Super jednoduchá fakturácia", - "for_freelancer": "pre freelancerov a", - "small_businesses": "Malé firmy", - "crater_help": "Crater vám pomôže sledovať výdavky zaznamenávať platby a generovať prekrásne", - "invoices_and_estimates": "faktúry a cenové odhady s možnosťou výberu viacerých vzhľadov." - }, "validation": { "invalid_phone": "Zlé telefónné číslo", - "invalid_url": "Nesprávna URL adresa (ex: http://www.crater.com)", - "invalid_domain_url": "Nesprávna URL (ex: crater.com)", + "invalid_url": "Nesprávna URL adresa (ex: http://www.craterapp.com)", + "invalid_domain_url": "Nesprávna URL (ex: craterapp.com)", "required": "Povinné pole", "email_incorrect": "Zlý email.", "email_already_taken": "Email sa uz používa.", @@ -1151,8 +1090,7 @@ "address_maxlength": "Adresa nesmie obsahovať viac ako 255 znakov", "ref_number_maxlength": "Referenčné čislo nesmie obsahovať viac ako 255 znakov", "prefix_maxlength": "Predpona nesmie mať viac ako 5 znakov.", - "something_went_wrong": "Niečo neprebehlo v poriadku, odskúšajte prosím znova.", - "number_length_minvalue": "Number lenght should be greater than 0" + "something_went_wrong": "Niečo neprebehlo v poriadku, odskúšajte prosím znova." }, "pdf_estimate_label": "Cenový odhad", "pdf_estimate_number": "Číslo cenového odhadu", @@ -1167,11 +1105,9 @@ "pdf_quantity_label": "Počet", "pdf_price_label": "Cena", "pdf_discount_label": "Zľava", - "pdf_tax_label": "Daň", "pdf_amount_label": "Celkom", "pdf_subtotal": "Medzisúčet", "pdf_total": "Súčet", - "pdf_payment_label": "Payment", "pdf_payment_receipt_label": "Doklad o zaplatení", "pdf_payment_date": "Dátum platby", "pdf_payment_number": "Číslo platby", @@ -1180,9 +1116,6 @@ "pdf_expense_report_label": "Report výdajov", "pdf_total_expenses_label": "Celkové výdaje", "pdf_profit_loss_label": "Zisky a straty", - "pdf_sales_customers_label": "Sales Customer Report", - "pdf_sales_items_label": "Sales Item Report", - "pdf_tax_summery_label": "Tax Summary Report", "pdf_income_label": "Príjem", "pdf_net_profit_label": "Čistý príjem", "pdf_customer_sales_report": "Report predajov: Podľa zákazníkov", @@ -1194,5 +1127,6 @@ "pdf_expenses_label": "Výdaje", "pdf_bill_to": "Fakturovať,", "pdf_ship_to": "Doručiť,", - "pdf_received_from": "Prijaté od:" + "pdf_received_from": "Prijaté od:", + "pdf_tax_label": "daň" } diff --git a/resources/assets/js/plugins/sr.json b/resources/scripts/locales/sr.json similarity index 93% rename from resources/assets/js/plugins/sr.json rename to resources/scripts/locales/sr.json index 79b5788ba..9aa7dd7a1 100644 --- a/resources/assets/js/plugins/sr.json +++ b/resources/scripts/locales/sr.json @@ -104,9 +104,6 @@ "net_income": "Prihod NETO", "year": "Odaberi godinu" }, - "weekly_invoices": { - "title": "Fakture nedeljno" - }, "monthly_chart": { "title": "Prodaja & Rashodi" }, @@ -295,7 +292,6 @@ "created_message": "Profaktura uspešno kreirana", "updated_message": "Profaktura uspešno ažurirana", "deleted_message": "Profaktura uspešno obrisana | Profakture uspešno obrisane", - "user_email_does_not_exist": "Email adresa klijenta ne postoji", "something_went_wrong": "nešto je krenulo naopako", "item": { "title": "Naziv stavke", @@ -368,7 +364,7 @@ "select_invoice": "Odaberi Fakturu", "no_matching_invoices": "Ne postoje Fakture koje odgovaraju pretrazi!", "mark_as_sent_successfully": "Faktura uspešno označena kao Poslata", - "send_invoice_successfully": "Faktura uspešno poslata", + "invoice_sent_successfully": "Faktura uspešno poslata", "cloned_successfully": "Uspešno napravljen duplikat Fakture", "clone_invoice": "Napravi duplikat", "confirm_clone": "Ova Faktura će biti duplikat nove Fakture", @@ -386,39 +382,14 @@ "select_an_item": "Unesi tekst ili klikni da izabereš", "type_item_description": "Unesi opis Stavke (nije obavezno)" }, - "payment_attached_message": "Jedna od odabranih faktura već ima uplatu povezanu sa njom. Obrišite prvo povezane uplate da bi nastavili sa brisanjem", "confirm_delete": "Nećeš moći da povratiš ovu Fakturu | Nećeš moći da povratiš ove Fakture", "created_message": "Faktura uspešno kreirana", "updated_message": "Faktura uspešno ažurirana", "deleted_message": "Faktura uspešno obrisana | Fakture uspešno obrisane", "marked_as_sent_message": "Faktura označena kao uspešno poslata", - "user_email_does_not_exist": "Email adresa klijenta ne postoji", "something_went_wrong": "nešto je krenulo naopako", "invalid_due_amount_message": "Ukupan iznos za plaćanje u fakturi ne može biti manji od iznosa uplate za ovu fakturu. Molim Vas ažurirajte fakturu ili obrišite uplate koje su povezane sa ovom fakturom da bi nastavili." }, - "credit_notes": { - "title": "Napomena o Kreditu", - "credit_notes_list": "Lista napomena o kreditima", - "credit_notes": "Napomene o Kreditima", - "contact": "Kontakt", - "date": "Datum", - "amount": "Iznos", - "action": "Akcija", - "credit_number": "Broj Kredita", - "notes": "Napomena", - "confirm_delete": "Da li želiš da obrišeš ovu napomenu o kreditu?", - "item": { - "title": "Naziv Stavke", - "description": "Opis", - "quantity": "Količina", - "price": "Cena", - "discount": "Popust", - "total": "Ukupno za plaćanje", - "total_discount": "Ukupan popust", - "sub_total": "Ukupno", - "tax": "Porez" - } - }, "payments": { "title": "Uplate", "payments_list": "Lista uplata", @@ -450,7 +421,6 @@ "confirm_mark_as_sent": "Ovo plaćanje će biti označena kao Poslata", "confirm_send_payment": "Ovo plaćanje će biti poslato putem Email-a klijentu", "send_payment_successfully": "Plaćanje uspešno poslato", - "user_email_does_not_exist": "Email adresa klijenta ne postoji", "something_went_wrong": "nešto je krenulo naopako", "confirm_delete": "Nećeš moći da povratiš ovu Uplatu | Nećeš moći da povratiš ove Uplate", "created_message": "Uplata uspešno kreirana", @@ -515,8 +485,7 @@ "password_reset_successfully": "Šifra Uspešno Resetovana", "enter_email": "Unesi email", "enter_password": "Unesi šifru", - "retype_password": "Ponovo unesi šifru", - "login_placeholder": "mail@example.com" + "retype_password": "Ponovo unesi šifru" }, "users": { "title": "Korisnici", @@ -751,30 +720,24 @@ "title": "Fakture", "notes": "Napomene", "invoice_prefix": "Prefiks faktura", - "invoice_number_length": "Invoice number length", "default_invoice_email_body": "Podrazumevan sadržaj email-a za Fakture", "invoice_settings": "Podešavanje za fakture", "autogenerate_invoice_number": "Automatski-generiši broj fakture", - "invoice_setting_description": "Onemogući ovo, Ako Vi ne želite da automatski-generišete broj fakture kada pravite novu fakturu.", - "invoice_email_attachment": "Send invoices as attachments", - "invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.", + "autogenerate_invoice_number_desc": "Onemogući ovo, Ako Vi ne želite da automatski-generišete broj fakture kada pravite novu fakturu.", "enter_invoice_prefix": "Unesite prefiks fakture", "terms_and_conditions": "Uslovi Korišćenja", "company_address_format": "Format adrese firme", "shipping_address_format": "Format adrese za dostavu firme", "billing_address_format": "Format adrese za naplatu firme", - "invoice_setting_updated": "Podešavanje za fakture je uspešno sačuvano" + "invoice_settings_updated": "Podešavanje za fakture je uspešno sačuvano" }, "estimates": { "title": "Profakture", "estimate_prefix": "Prefiks profaktura", - "estimate_number_length": "Estimate number length", "default_estimate_email_body": "Podrazumevan sadržaj email-a za Profakture", "estimate_settings": "Podešavanje za profakture", "autogenerate_estimate_number": "Automatski-generiši broj profakture", "estimate_setting_description": "Onemogući ovo, Ako Vi ne želite da automatski-generišete broj profakture kada pravite novu profakturu.", - "estimate_email_attachment": "Send estimates as attachments", - "estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.", "enter_estimate_prefix": "Unesite prefiks profakture", "estimate_setting_updated": "Podešavanje za profakture je uspešno sačuvano", "company_address_format": "Format adrese firme", @@ -785,13 +748,10 @@ "title": "Uplate", "description": "Način plaćanja", "payment_prefix": "Prefiks uplata", - "payment_number_length": "Payment number lenght", "default_payment_email_body": "Podrazumevan sadržaj email-a za potvrdu o plaćanju (račun)", "payment_settings": "Podešavanje za plaćanja", "autogenerate_payment_number": "Automatski-generiši broj uplate", "payment_setting_description": "Onemogući ovo, Ako ne želite da automatski-generišete broj uplate kada pravite novu uplatu.", - "payment_email_attachment": "Send payments as attachments", - "payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.", "enter_payment_prefix": "Unesite prefiks uplate", "payment_setting_updated": "Podešavanje za plaćanja je uspešno sačuvano", "payment_modes": "Način Plaćanja", @@ -1107,18 +1067,10 @@ "database_variables_save_successfully": "Baza podataka je uspešno konfigurisana" } }, - "layout_login": { - "copyright_crater": "Autorska prava @ Crater - 2020", - "super_simple_invoicing": "Veoma jednostavno fakturisanje", - "for_freelancer": "za frilensere &", - "small_businesses": "Mala preduzeća", - "crater_help": "Crater ti pomaže da pratiš rashode, evidentiraš isplate i generišeš lepše", - "invoices_and_estimates": "fakture i profakture sa mogućnošću odabira više obrazaca" - }, "validation": { "invalid_phone": "Pogrešan Broj Telefona", - "invalid_url": "Nevažeći URL (primer: http://www.crater.com)", - "invalid_domain_url": "Pogrešan URL (primer: crater.com)", + "invalid_url": "Nevažeći URL (primer: http://www.craterapp.com)", + "invalid_domain_url": "Pogrešan URL (primer: craterapp.com)", "required": "Obavezno polje", "email_incorrect": "Pogrešan E-mail", "email_already_taken": "Navedeni E-mail je zauzet", @@ -1151,8 +1103,7 @@ "address_maxlength": "Adresa ne može da ima više od 255 karaktera", "ref_number_maxlength": "Poziv na broj ne može da ima više od 225 karaktera", "prefix_maxlength": "Prefiks ne može da ima više od 5 karaktera", - "something_went_wrong": "nešto je krenulo naopako", - "number_length_minvalue": "Number lenght should be greater than 0" + "something_went_wrong": "nešto je krenulo naopako" }, "pdf_estimate_label": "Profaktura", "pdf_estimate_number": "Broj Profakture", @@ -1167,7 +1118,6 @@ "pdf_quantity_label": "Količina", "pdf_price_label": "Cena", "pdf_discount_label": "Popust", - "pdf_tax_label": "Porez", "pdf_amount_label": "Iznos", "pdf_subtotal": "Osnovica za obračun PDV-a", "pdf_total": "Ukupan iznos", @@ -1194,5 +1144,6 @@ "pdf_expenses_label": "Rashodi", "pdf_bill_to": "Račun za,", "pdf_ship_to": "Isporučiti za,", - "pdf_received_from": "Poslat od strane:" + "pdf_received_from": "Poslat od strane:", + "pdf_tax_label": "Tax" } diff --git a/resources/assets/js/plugins/sv.json b/resources/scripts/locales/sv.json similarity index 93% rename from resources/assets/js/plugins/sv.json rename to resources/scripts/locales/sv.json index 5b1536ffb..bbd8ffbf5 100644 --- a/resources/assets/js/plugins/sv.json +++ b/resources/scripts/locales/sv.json @@ -63,8 +63,6 @@ "choose_template": "Välj mall", "choose": "Välj", "remove": "Ta bort", - "powered_by": "Powered by", - "bytefury": "Bytefury", "select_a_status": "Välj status", "select_a_tax": "Välj moms", "search": "Sök", @@ -104,9 +102,6 @@ "net_income": "Nettoinkomst", "year": "Välj år" }, - "weekly_invoices": { - "title": "Faktura per vecka" - }, "monthly_chart": { "title": "Försäljning och utgifter" }, @@ -295,7 +290,6 @@ "created_message": "Kostnadsförslag skapades", "updated_message": "Kostnadsförslag ändrades", "deleted_message": "Kostnadsförslag raderades | Kostnadsförslag raderades", - "user_email_does_not_exist": "Användarens epost saknas", "something_went_wrong": "något gick fel", "item": { "title": "Artikelnamn", @@ -368,7 +362,7 @@ "select_invoice": "Välj faktura", "no_matching_invoices": "Inga matchande fakturor!", "mark_as_sent_successfully": "Fakturans status ändrad till skickad", - "send_invoice_successfully": "Fakturan skickades", + "invoice_sent_successfully": "Fakturan skickades", "cloned_successfully": "Fakturan kopierades", "clone_invoice": "Kopiera faktura", "confirm_clone": "Denna faktura kopieras till en ny faktura", @@ -386,39 +380,14 @@ "select_an_item": "Skriv eller klicka för att välja artikel", "type_item_description": "Artikeltypsbeskrivning (frivillig)" }, - "payment_attached_message": "En av dom valda fakturorna har redan en betalning kopplad till sig. Du måste radera dom kopplade betalningarna först för att kunna fortsätta raderingen", "confirm_delete": "Du kommer inte kunna återställa denna faktura | Du kommer inte kunna återställa dessa fakturor", "created_message": "Faktura skapades", "updated_message": "Faktura uppdaterades", "deleted_message": "Faktura raderades | fakturor raderades", "marked_as_sent_message": "Faktura markerad som skickad", - "user_email_does_not_exist": "Användaren saknar epostadress", "something_went_wrong": "något blev fel", "invalid_due_amount_message": "Totalsumman för fakturan kan inte vara lägra än den betalda summan. Vänligen uppdatera fakturan eller radera dom kopplade betalningarna." }, - "credit_notes": { - "title": "Kreditnoteringar", - "credit_notes_list": "Lista med kreditnoteringar", - "credit_notes": "Kreditnoteringar", - "contact": "Kontakt", - "date": "Datum", - "amount": "Summa", - "action": "Handling", - "credit_number": "Kreditnummer", - "notes": "Noteringar", - "confirm_delete": "Vill du ta bort denna kreditnotering?", - "item": { - "title": "Artikelnamn", - "description": "Beskrivning", - "quantity": "Antal", - "price": "Pris", - "discount": "Rabatt", - "total": "Summa", - "total_discount": "Summa rabatt", - "sub_total": "Delsumma", - "tax": "Moms" - } - }, "payments": { "title": "Betalningar", "payments_list": "Lista med betalningar", @@ -450,7 +419,6 @@ "confirm_mark_as_sent": "Detta kostnadsförslag markeras som skickat", "confirm_send_payment": "Denna betalning skickas till kunden via epost", "send_payment_successfully": "Betalningen skickades", - "user_email_does_not_exist": "Användaren saknar epost", "something_went_wrong": "något gick fel", "confirm_delete": "Du kommer inte kunna återställa denna betalning | Du kommer inte kunna återställa dessa betalningar", "created_message": "Betalning skapades", @@ -515,8 +483,7 @@ "password_reset_successfully": "Lösenord återställt", "enter_email": "Skriv in epost", "enter_password": "Skriv in lösenord", - "retype_password": "Skriv lösenordet igen", - "login_placeholder": "mail@example.com" + "retype_password": "Skriv lösenordet igen" }, "users": { "title": "Användare", @@ -751,30 +718,24 @@ "title": "Fakturor", "notes": "Noteringar", "invoice_prefix": "Prefix för fakturor", - "invoice_number_length": "Invoice number length", "default_invoice_email_body": "Standardtext för faktura", "invoice_settings": "Fakturainställningar", "autogenerate_invoice_number": "Generera fakturanummer automatiskt", - "invoice_setting_description": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt fakturanummer vid skapande av faktura.", - "invoice_email_attachment": "Send invoices as attachments", - "invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.", + "autogenerate_invoice_number_desc": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt fakturanummer vid skapande av faktura.", "enter_invoice_prefix": "Skriv prefix för faktura", "terms_and_conditions": "Villkor", "company_address_format": "Formatering av företagsadress", "shipping_address_format": "Formatering av leveransadress", "billing_address_format": "Formatering av fakturaadress", - "invoice_setting_updated": "Fakturainställningar uppdaterades" + "invoice_settings_updated": "Fakturainställningar uppdaterades" }, "estimates": { "title": "Kostnadsförslag", "estimate_prefix": "Prefix för kostnadsförslag", - "estimate_number_length": "Estimate number length", "default_estimate_email_body": "Standardtext för kostnadsförslag", "estimate_settings": "Kostnadsförslagsinställningar", "autogenerate_estimate_number": "Generera kostnadsförslagsnummer automatiskt", "estimate_setting_description": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt kostnadsförslagsnummer vid skapande av kostnadsförslag.", - "estimate_email_attachment": "Send estimates as attachments", - "estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.", "enter_estimate_prefix": "Skriv prefix för kostnadsförslag", "estimate_setting_updated": "Kostnadsförslagsinställningar uppdaterades", "company_address_format": "Formatering av företagsadress", @@ -785,13 +746,10 @@ "title": "Betalningar", "description": "Överföringstyper för betalningar", "payment_prefix": "Prefix för betalningar", - "payment_number_length": "Payment number lenght", "default_payment_email_body": "Standardtext för betalningar", "payment_settings": "Betalningsinställningar", "autogenerate_payment_number": "Generera betalningsnummer automatiskt", "payment_setting_description": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt betalningssnummer vid skapande av betalning.", - "payment_email_attachment": "Send payments as attachments", - "payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.", "enter_payment_prefix": "Skriv prefix för kostnadsförslag", "payment_setting_updated": "Betalningsinställningar uppdaterades", "payment_modes": "Betalningssätt", @@ -931,7 +889,6 @@ "download_zip_file": "Ladda ner ZIP-fil", "unzipping_package": "Zippar upp paket", "copying_files": "Kopierar filer", - "deleting_files": "Deleting Unused files", "running_migrations": "Kör migreringar", "finishing_update": "Avslutar uppdateringen", "update_failed": "Uppdatering misslyckades", @@ -1107,18 +1064,10 @@ "database_variables_save_successfully": "Databasinställningar sparades." } }, - "layout_login": { - "copyright_crater": "Copyright @ Crater - 2020", - "super_simple_invoicing": "Superenkel fakturering", - "for_freelancer": "för frilansare &", - "small_businesses": "mindre företag ", - "crater_help": "Crater hjälper dig hålla koll på dina utgifter, följa dina inkommande betalningar & skapa snygga", - "invoices_and_estimates": "fakturor och kostnadsförslag med möjligheten att välja mellan olika mallar." - }, "validation": { "invalid_phone": "Felaktigt telefonnummer", - "invalid_url": "Felaktig url (ex: http://www.crater.com)", - "invalid_domain_url": "Felaktig url (ex: crater.com)", + "invalid_url": "Felaktig url (ex: http://www.craterapp.com)", + "invalid_domain_url": "Felaktig url (ex: craterapp.com)", "required": "Fältet är tvingande", "email_incorrect": "Felaktig epostadress.", "email_already_taken": "Denna epostadress finns redan.", @@ -1151,8 +1100,7 @@ "address_maxlength": "Adress kan inte vara större än 255 tecken.", "ref_number_maxlength": "Referensnummer kan inte vara större än 255 tecken.", "prefix_maxlength": "Prefix kan inte vara större än 5 tecken.", - "something_went_wrong": "något blev fel", - "number_length_minvalue": "Number lenght should be greater than 0" + "something_went_wrong": "något blev fel" }, "pdf_estimate_label": "Kostnadsförslag", "pdf_estimate_number": "Kostnadsförslagsnummer", @@ -1167,7 +1115,6 @@ "pdf_quantity_label": "Antal", "pdf_price_label": "Kostnad", "pdf_discount_label": "Rabatt", - "pdf_tax_label": "Moms", "pdf_amount_label": "Belopp", "pdf_subtotal": "Delsumma", "pdf_total": "Summa", @@ -1194,5 +1141,6 @@ "pdf_expenses_label": "Utgifter", "pdf_bill_to": "Faktureras till,", "pdf_ship_to": "Skickas till,", - "pdf_received_from": "Från:" + "pdf_received_from": "Från:", + "pdf_tax_label": "Tax" } diff --git a/resources/assets/js/plugins/vi.json b/resources/scripts/locales/vi.json similarity index 91% rename from resources/assets/js/plugins/vi.json rename to resources/scripts/locales/vi.json index 14e17cd15..560b70f16 100644 --- a/resources/assets/js/plugins/vi.json +++ b/resources/scripts/locales/vi.json @@ -18,13 +18,13 @@ "copy_pdf_url": "Sao chép Url PDF", "download_pdf": "tải PDF", "save": "Tiết kiệm", - "create": "Tạo nên", + "create": "Tạo mới", "cancel": "Huỷ bỏ", "update": "Cập nhật", "deselect": "Bỏ chọn", "download": "Tải xuống", "from_date": "Từ ngày", - "to_date": "Đến nay", + "to_date": "Đến ngày", "from": "Từ", "to": "Đến", "sort_by": "Sắp xếp theo", @@ -39,7 +39,7 @@ "home": "Trang Chủ", "filter": "Bộ lọc", "delete": "Xóa bỏ", - "edit": "Biên tập", + "edit": "Chỉnh sửa", "view": "Lượt xem", "add_new_item": "Thêm mục mới", "clear_all": "Làm sạch tất cả", @@ -52,17 +52,17 @@ "percentage": "Phần trăm", "tax": "THUẾ", "total_amount": "TỔNG CỘNG", - "bill_to": "Hoa đơn để", - "ship_to": "Tàu", + "bill_to": "Giao từ", + "ship_to": "Giao tới", "due": "Đến hạn", "draft": "Bản nháp", - "sent": "Gởi", + "sent": "Gửi", "all": "Tất cả", "select_all": "Chọn tất cả", "choose_file": "Bấm vào đây để chọn một tập tin", "choose_template": "Chọn một mẫu", "choose": "Chọn", - "remove": "Tẩy", + "remove": "Gỡ", "powered_by": "Được cung cấp bởi", "bytefury": "Bytefury", "select_a_status": "Chọn một trạng thái", @@ -82,7 +82,7 @@ "select_city": "Lựa chọn thành phố", "street_1": "đường số 1", "street_2": "Đường 2", - "action_failed": "Diễn: Đã thất bại", + "action_failed": "Đã thất bại", "retry": "Thử lại", "choose_note": "Chọn Ghi chú", "no_note_found": "Không tìm thấy ghi chú", @@ -104,9 +104,6 @@ "net_income": "Thu nhập ròng", "year": "Chọn năm" }, - "weekly_invoices": { - "title": "Hóa đơn hàng tuần" - }, "monthly_chart": { "title": "Bán hàng" }, @@ -129,7 +126,7 @@ }, "tax_types": { "name": "Tên", - "description": "Sự miêu tả", + "description": "Miêu tả", "percent": "Phần trăm", "compound_tax": "Thuế tổng hợp" }, @@ -153,8 +150,8 @@ "email": "E-mail", "address": "Địa chỉ", "phone": "Điện thoại", - "website": "Trang mạng", - "overview": "Tổng quat", + "website": "Website", + "overview": "Tổng quan", "enable_portal": "Bật Cổng thông tin", "country": "Quốc gia", "state": "Tiểu bang", @@ -165,7 +162,7 @@ "password": "Mật khẩu", "street_number": "Số đường", "primary_currency": "Tiền tệ chính", - "description": "Sự miêu tả", + "description": "Miêu tả", "add_new_customer": "Thêm khách hàng mới", "save_customer": "Lưu khách hàng", "update_customer": "Cập nhật khách hàng", @@ -199,7 +196,7 @@ "items_list": "Danh sách mặt hàng", "name": "Tên", "unit": "Đơn vị", - "description": "Sự miêu tả", + "description": "Miêu tả", "added_on": "Đã thêm vào", "price": "Giá bán", "date_of_creation": "Ngày tạo", @@ -210,7 +207,7 @@ "update_item": "Cập nhật mặt hàng", "item": "Mặt hàng | Mặt hàng", "add_new_item": "Thêm mục mới", - "new_item": "Vật phẩm mới", + "new_item": "Sản phẩm mới", "edit_item": "Chỉnh sửa mục", "no_items": "Chưa có mặt hàng nào!", "list_of_items": "Phần này sẽ chứa danh sách các mục.", @@ -227,22 +224,22 @@ "estimate": "Ước tính | Ước tính", "estimates_list": "Danh sách ước tính", "days": "{days} Ngày", - "months": "{tháng} tháng", - "years": "{năm} Năm", + "months": "{months} tháng", + "years": "{years} Năm", "all": "Tất cả", "paid": "Đã thanh toán", "unpaid": "Chưa thanh toán", "customer": "KHÁCH HÀNG", - "ref_no": "REF KHÔNG.", + "ref_no": "SỐ THAM CHIẾU.", "number": "CON SỐ", - "amount_due": "SỐ TIỀN ĐÚNG", + "amount_due": "SỐ TIỀN THANH TOÁN", "partially_paid": "Thanh toán một phần", "total": "Toàn bộ", "discount": "Giảm giá", "sub_total": "Tổng phụ", "estimate_number": "Số ước tính", "ref_number": "Số REF", - "contact": "Tiếp xúc", + "contact": "Liên hệ", "add_item": "Thêm một mặt hàng", "date": "Ngày", "due_date": "Ngày đáo hạn", @@ -271,11 +268,11 @@ "mark_as_sent_successfully": "Ước tính được đánh dấu là đã gửi thành công", "send_estimate_successfully": "Ước tính đã được gửi thành công", "errors": { - "required": "Lĩnh vực được yêu cầu" + "required": "Trường không được bỏ trống." }, "accepted": "Đã được chấp nhận", "rejected": "Từ chối", - "sent": "Gởi", + "sent": "Gửi", "draft": "Bản nháp", "declined": "Suy giảm", "new_estimate": "Ước tính mới", @@ -295,11 +292,10 @@ "created_message": "Ước tính được tạo thành công", "updated_message": "Đã cập nhật ước tính thành công", "deleted_message": "Đã xóa ước tính thành công | Đã xóa ước tính thành công", - "user_email_does_not_exist": "Email người dùng không tồn tại", - "something_went_wrong": "có gì đó không ổn", + "something_went_wrong": "Có gì đó không ổn", "item": { "title": "Danh mục", - "description": "Sự miêu tả", + "description": "Miêu tả", "quantity": "Định lượng", "price": "Giá bán", "discount": "Giảm giá", @@ -316,8 +312,8 @@ "title": "Hóa đơn", "invoices_list": "Danh sách hóa đơn", "days": "{days} Ngày", - "months": "{tháng} tháng", - "years": "{năm} Năm", + "months": "{months} tháng", + "years": "{years} Năm", "all": "Tất cả", "paid": "Đã thanh toán", "unpaid": "Chưa thanh toán", @@ -326,9 +322,9 @@ "completed": "Đã hoàn thành", "customer": "KHÁCH HÀNG", "paid_status": "TRẠNG THÁI ĐÃ TRẢ TIỀN", - "ref_no": "REF KHÔNG.", - "number": "CON SỐ", - "amount_due": "SỐ TIỀN ĐÚNG", + "ref_no": "SỐ THAM CHIẾU.", + "number": "SỐ", + "amount_due": "SỐ TIỀN THANH TOÁN", "partially_paid": "Thanh toán một phần", "total": "Toàn bộ", "discount": "Giảm giá", @@ -336,7 +332,7 @@ "invoice": "Hóa đơn | Hóa đơn", "invoice_number": "Số hóa đơn", "ref_number": "Số REF", - "contact": "Tiếp xúc", + "contact": "Liên hệ", "add_item": "Thêm một mặt hàng", "date": "Ngày", "due_date": "Ngày đáo hạn", @@ -368,13 +364,13 @@ "select_invoice": "Chọn hóa đơn", "no_matching_invoices": "Không có hóa đơn phù hợp!", "mark_as_sent_successfully": "Hóa đơn được đánh dấu là đã gửi thành công", - "send_invoice_successfully": "Hóa đơn đã được gửi thành công", + "invoice_sent_successfully": "Hóa đơn đã được gửi thành công", "cloned_successfully": "Hóa đơn được sao chép thành công", "clone_invoice": "Hóa đơn nhân bản", "confirm_clone": "Hóa đơn này sẽ được sao chép vào một Hóa đơn mới", "item": { "title": "Danh mục", - "description": "Sự miêu tả", + "description": "Miêu tả", "quantity": "Định lượng", "price": "Giá bán", "discount": "Giảm giá", @@ -386,39 +382,14 @@ "select_an_item": "Nhập hoặc nhấp để chọn một mục", "type_item_description": "Loại Mục Mô tả (tùy chọn)" }, - "payment_attached_message": "Một trong các hóa đơn được chọn đã có một khoản thanh toán được đính kèm. Đảm bảo xóa các khoản thanh toán đính kèm trước để tiếp tục xóa", "confirm_delete": "Bạn sẽ không thể khôi phục Hóa đơn này | Bạn sẽ không thể khôi phục các Hóa đơn này", "created_message": "Hóa đơn đã được tạo thành công", "updated_message": "Đã cập nhật hóa đơn thành công", "deleted_message": "Hóa đơn đã được xóa thành công | Hóa đơn đã được xóa thành công", "marked_as_sent_message": "Hóa đơn được đánh dấu là đã gửi thành công", - "user_email_does_not_exist": "Email người dùng không tồn tại", "something_went_wrong": "có gì đó không ổn", "invalid_due_amount_message": "Tổng số tiền trên Hóa đơn không được nhỏ hơn tổng số tiền đã thanh toán cho Hóa đơn này. Vui lòng cập nhật hóa đơn hoặc xóa các khoản thanh toán liên quan để tiếp tục." }, - "credit_notes": { - "title": "Giấy báo có", - "credit_notes_list": "Danh sách ghi chú tín dụng", - "credit_notes": "Giấy báo có", - "contact": "Tiếp xúc", - "date": "Ngày", - "amount": "Số tiền", - "action": "Hoạt động", - "credit_number": "Số tín dụng", - "notes": "Ghi chú", - "confirm_delete": "Bạn có muốn xóa thư tín dụng này không?", - "item": { - "title": "Danh mục", - "description": "Sự miêu tả", - "quantity": "Định lượng", - "price": "Giá bán", - "discount": "Giảm giá", - "total": "Toàn bộ", - "total_discount": "Tổng khấu trừ", - "sub_total": "Tổng phụ", - "tax": "Thuế" - } - }, "payments": { "title": "Thanh toán", "payments_list": "Danh sách thanh toán", @@ -427,7 +398,7 @@ "date": "Ngày", "amount": "Số tiền", "action": "Hoạt động", - "payment_number": "Số tiền phải trả", + "payment_number": "Mã Số Thanh Toán", "payment_mode": "Phương thức thanh toán", "invoice": "Hóa đơn", "note": "Ghi chú", @@ -450,8 +421,7 @@ "confirm_mark_as_sent": "Ước tính này sẽ được đánh dấu là đã gửi", "confirm_send_payment": "Khoản thanh toán này sẽ được gửi qua email cho khách hàng", "send_payment_successfully": "Thanh toán đã được gửi thành công", - "user_email_does_not_exist": "Email người dùng không tồn tại", - "something_went_wrong": "có gì đó không ổn", + "something_went_wrong": "Có gì đó không ổn", "confirm_delete": "Bạn sẽ không thể khôi phục Thanh toán này | Bạn sẽ không thể khôi phục các Khoản thanh toán này", "created_message": "Thanh toán được tạo thành công", "updated_message": "Đã cập nhật thanh toán thành công", @@ -464,12 +434,12 @@ "select_a_customer": "Chọn một khách hàng", "expense_title": "Tiêu đề", "customer": "khách hàng", - "contact": "Tiếp xúc", + "contact": "Liên hệ", "category": "thể loại", "from_date": "Từ ngày", - "to_date": "Đến nay", + "to_date": "Đến ngày", "expense_date": "Ngày", - "description": "Sự miêu tả", + "description": "Miêu tả", "receipt": "Biên lai", "amount": "Số tiền", "action": "Hoạt động", @@ -495,7 +465,7 @@ "categories_list": "Danh sách hạng mục", "title": "Tiêu đề", "name": "Tên", - "description": "Sự miêu tả", + "description": "Miêu tả", "amount": "Số tiền", "actions": "Hành động", "add_category": "thêm thể loại", @@ -515,14 +485,13 @@ "password_reset_successfully": "Đặt lại mật khẩu thành công", "enter_email": "Nhập email", "enter_password": "Nhập mật khẩu", - "retype_password": "Gõ lại mật khẩu", - "login_placeholder": "mail@example.com" + "retype_password": "Gõ lại mật khẩu" }, "users": { "title": "Người dùng", "users_list": "Danh sách người dùng", "name": "Tên", - "description": "Sự miêu tả", + "description": "Miêu tả", "added_on": "Đã thêm vào", "date_of_creation": "Ngày tạo", "action": "Hoạt động", @@ -532,7 +501,7 @@ "user": "Người dùng | Người dùng", "add_new_user": "Thêm người dùng mới", "new_user": "Người dùng mới", - "edit_user": "Người dùng biên tập", + "edit_user": "Chỉnh sửa gười dùng", "no_users": "Chưa có người dùng nào!", "list_of_users": "Phần này sẽ chứa danh sách người dùng.", "email": "E-mail", @@ -547,30 +516,30 @@ "reports": { "title": "Báo cáo", "from_date": "Từ ngày", - "to_date": "Đến nay", + "to_date": "Đến ngày", "status": "Trạng thái", "paid": "Đã thanh toán", "unpaid": "Chưa thanh toán", - "download_pdf": "tải PDF", + "download_pdf": "Tải PDF", "view_pdf": "Xem PDF", "update_report": "Cập nhật báo cáo", "report": "Báo cáo | Báo cáo", "profit_loss": { "profit_loss": "Lợi nhuận", - "to_date": "Đến nay", + "to_date": "Đến ngày", "from_date": "Từ ngày", "date_range": "Chọn phạm vi ngày" }, "sales": { "sales": "Bán hàng", "date_range": "Chọn phạm vi ngày", - "to_date": "Đến nay", + "to_date": "Đến ngày", "from_date": "Từ ngày", "report_type": "Loại báo cáo" }, "taxes": { "taxes": "Thuế", - "to_date": "Đến nay", + "to_date": "Đến ngày", "from_date": "Từ ngày", "date_range": "Chọn phạm vi ngày" }, @@ -600,7 +569,7 @@ "category": "thể loại", "date": "Ngày", "amount": "Số tiền", - "to_date": "Đến nay", + "to_date": "Đến ngày", "from_date": "Từ ngày", "date_range": "Chọn phạm vi ngày" } @@ -650,11 +619,11 @@ "host": "Máy chủ Thư", "port": "Cổng thư", "driver": "Trình điều khiển Thư", - "secret": "Bí mật", - "mailgun_secret": "Bí mật Mailgun", + "secret": "Khóa", + "mailgun_secret": "Khóa Mailgun", "mailgun_domain": "Miền", "mailgun_endpoint": "Điểm cuối của Mailgun", - "ses_secret": "Bí mật SES", + "ses_secret": "Khóa SES", "ses_key": "Khóa SES", "password": "Mật khẩu thư", "username": "Tên người dùng thư", @@ -680,7 +649,7 @@ "city": "Tp.", "address": "Địa chỉ", "zip": "Zip", - "save": "Tiết kiệm", + "save": "Lưu", "updated_message": "Thông tin công ty được cập nhật thành công" }, "custom_fields": { @@ -729,12 +698,12 @@ "customer_shipping_address": "Địa chỉ giao hàng của khách hàng", "company_address": "địa chỉ công ty", "insert_fields": "Chèn trường", - "contact": "Tiếp xúc", + "contact": "Liên hệ", "address": "Địa chỉ", "display_name": "Tên hiển thị", "primary_contact_name": "Tên liên hệ chính", "email": "E-mail", - "website": "Trang mạng", + "website": "Website", "name": "Tên", "country": "Quốc gia", "state": "Tiểu bang", @@ -751,11 +720,10 @@ "title": "Hóa đơn", "notes": "Ghi chú", "invoice_prefix": "Tiền tố hóa đơn", - "invoice_number_length": "Invoice number length", "default_invoice_email_body": "Nội dung email hóa đơn mặc định", "invoice_settings": "Cài đặt hóa đơn", "autogenerate_invoice_number": "Tự động tạo số hóa đơn", - "invoice_setting_description": "Tắt tính năng này, Nếu bạn không muốn tự động tạo số hóa đơn mỗi khi bạn tạo hóa đơn mới.", + "autogenerate_invoice_number_desc": "Tắt tính năng này, Nếu bạn không muốn tự động tạo số hóa đơn mỗi khi bạn tạo hóa đơn mới.", "invoice_email_attachment": "Gửi hóa đơn dưới dạng tệp đính kèm", "invoice_email_attachment_setting_description": "Bật tính năng này nếu bạn muốn gửi hóa đơn dưới dạng tệp đính kèm email. Xin lưu ý rằng nút 'Xem Hóa đơn' trong email sẽ không được hiển thị nữa khi được bật.", "enter_invoice_prefix": "Nhập tiền tố hóa đơn", @@ -763,12 +731,11 @@ "company_address_format": "Định dạng địa chỉ công ty", "shipping_address_format": "Định dạng địa chỉ giao hàng", "billing_address_format": "Định dạng địa chỉ thanh toán", - "invoice_setting_updated": "Đã cập nhật cài đặt hóa đơn thành công" + "invoice_settings_updated": "Đã cập nhật cài đặt hóa đơn thành công" }, "estimates": { "title": "Ước tính", "estimate_prefix": "Tiền tố ước tính", - "estimate_number_length": "Estimate number length", "default_estimate_email_body": "Nội dung Email Ước tính Mặc định", "estimate_settings": "Cài đặt ước tính", "autogenerate_estimate_number": "Tự động tạo số ước tính", @@ -785,7 +752,6 @@ "title": "Thanh toán", "description": "Các phương thức giao dịch thanh toán", "payment_prefix": "Tiền tố thanh toán", - "payment_number_length": "Payment number lenght", "default_payment_email_body": "Nội dung Email Thanh toán Mặc định", "payment_settings": "Cài đặt thanh toán", "autogenerate_payment_number": "Tự động tạo số thanh toán", @@ -841,7 +807,7 @@ "password": "Mật khẩu", "confirm_password": "Xác nhận mật khẩu", "account_settings": "Cài đặt tài khoản", - "save": "Tiết kiệm", + "save": "Lưu", "section_description": "Bạn có thể cập nhật tên, email của mình", "updated_message": "Đã cập nhật cài đặt tài khoản thành công" }, @@ -859,7 +825,7 @@ "invoice_viewed_desc": "Khi khách hàng của bạn xem hóa đơn được gửi qua bảng điều khiển miệng núi lửa.", "estimate_viewed": "Ước tính đã xem", "estimate_viewed_desc": "Khi khách hàng của bạn xem ước tính được gửi qua bảng điều khiển miệng núi lửa.", - "save": "Tiết kiệm", + "save": "Lưu", "email_save_message": "Email đã được lưu thành công", "please_enter_email": "Vui lòng nhập Email" }, @@ -890,7 +856,7 @@ "add_category": "thêm thể loại", "edit_category": "Chỉnh sửa danh mục", "category_name": "tên danh mục", - "category_description": "Sự miêu tả", + "category_description": "Miêu tả", "created_message": "Danh mục Chi phí đã được tạo thành công", "deleted_message": "Đã xóa thành công danh mục chi phí", "updated_message": "Đã cập nhật danh mục chi phí thành công", @@ -906,7 +872,7 @@ "discount_setting": "Cài đặt chiết khấu", "discount_per_item": "Giảm giá cho mỗi mặt hàng", "discount_setting_description": "Bật tính năng này nếu bạn muốn thêm Giảm giá vào các mặt hàng hóa đơn riêng lẻ. Theo mặc định, Giảm giá được thêm trực tiếp vào hóa đơn.", - "save": "Tiết kiệm", + "save": "Lưu", "preference": "Sở thích | Sở thích", "general_settings": "Tùy chọn mặc định cho hệ thống.", "updated_message": "Đã cập nhật thành công các tùy chọn", @@ -981,7 +947,7 @@ "media_root": "Gốc phương tiện", "aws_driver": "Trình điều khiển AWS", "aws_key": "Khóa AWS", - "aws_secret": "Bí mật AWS", + "aws_secret": "Khóa AWS", "aws_region": "Khu vực AWS", "aws_bucket": "Nhóm AWS", "aws_root": "Gốc AWS", @@ -995,7 +961,7 @@ "dropbox_type": "Loại hộp chứa", "dropbox_token": "Mã thông báo Dropbox", "dropbox_key": "Khóa Dropbox", - "dropbox_secret": "Bí mật Dropbox", + "dropbox_secret": "Khóa Dropbox", "dropbox_app": "Ứng dụng Dropbox", "dropbox_root": "Gốc Dropbox", "default_driver": "Trình điều khiển mặc định", @@ -1026,7 +992,7 @@ "email": "E-mail", "password": "Mật khẩu", "confirm_password": "Xác nhận mật khẩu", - "save_cont": "Tiết kiệm", + "save_cont": "Lưu", "company_info": "Thông tin công ty", "company_info_desc": "Thông tin này sẽ được hiển thị trên hóa đơn. Lưu ý rằng bạn có thể chỉnh sửa điều này sau trên trang cài đặt.", "company_name": "Tên công ty", @@ -1075,11 +1041,11 @@ "host": "Máy chủ Thư", "port": "Cổng thư", "driver": "Trình điều khiển Thư", - "secret": "Bí mật", - "mailgun_secret": "Bí mật Mailgun", + "secret": "Khóa", + "mailgun_secret": "Khóa Mailgun", "mailgun_domain": "Miền", "mailgun_endpoint": "Điểm cuối của Mailgun", - "ses_secret": "Bí mật SES", + "ses_secret": "Khóa SES", "ses_key": "Khóa SES", "password": "Mật khẩu thư", "username": "Tên người dùng thư", @@ -1091,7 +1057,7 @@ }, "req": { "system_req": "yêu cầu hệ thống", - "php_req_version": "Php (bắt buộc phải có phiên bản {version})", + "php_req_version": "Php (version {version} required)", "check_req": "Kiểm tra yêu cầu", "system_req_desc": "Crater có một số yêu cầu máy chủ. Đảm bảo rằng máy chủ của bạn có phiên bản php bắt buộc và tất cả các phần mở rộng được đề cập bên dưới." }, @@ -1107,18 +1073,10 @@ "database_variables_save_successfully": "Đã cấu hình thành công cơ sở dữ liệu." } }, - "layout_login": { - "copyright_crater": "Bản quyền @ Crater - 2020", - "super_simple_invoicing": "Lập hóa đơn siêu đơn giản", - "for_freelancer": "dành cho những người làm nghề tự do", - "small_businesses": "Tiểu thương", - "crater_help": "Crater giúp bạn theo dõi chi phí, ghi lại các khoản thanh toán", - "invoices_and_estimates": "hóa đơn" - }, "validation": { "invalid_phone": "Số điện thoại không hợp lệ", - "invalid_url": "Url không hợp lệ (ví dụ: http://www.crater.com)", - "invalid_domain_url": "Url không hợp lệ (ví dụ: crater.com)", + "invalid_url": "Url không hợp lệ (ví dụ: http://www.craterapp.com)", + "invalid_domain_url": "Url không hợp lệ (ví dụ: craterapp.com)", "required": "Lĩnh vực được yêu cầu", "email_incorrect": "Email không chính xác.", "email_already_taken": "Lá thư đã được lấy đi.", @@ -1151,8 +1109,7 @@ "address_maxlength": "Địa chỉ không được lớn hơn 255 ký tự.", "ref_number_maxlength": "Số tham chiếu không được lớn hơn 255 ký tự.", "prefix_maxlength": "Tiền tố không được lớn hơn 5 ký tự.", - "something_went_wrong": "có gì đó không ổn", - "number_length_minvalue": "Number lenght should be greater than 0" + "something_went_wrong": "có gì đó không ổn" }, "pdf_estimate_label": "Ước tính", "pdf_estimate_number": "Số ước tính", @@ -1167,7 +1124,6 @@ "pdf_quantity_label": "Định lượng", "pdf_price_label": "Giá bán", "pdf_discount_label": "Giảm giá", - "pdf_tax_label": "Thuế", "pdf_amount_label": "Số tiền", "pdf_subtotal": "Tổng phụ", "pdf_total": "Toàn bộ", @@ -1185,14 +1141,15 @@ "pdf_tax_summery_label": "Báo cáo Tóm tắt Thuế", "pdf_income_label": "THU NHẬP = EARNINGS", "pdf_net_profit_label": "LỢI NHUẬN RÒNG", - "pdf_customer_sales_report": "Báo cáo bán hàng: Bởi khách hàng", + "pdf_customer_sales_report": "Báo cáo bán hàng: Theo khách hàng", "pdf_total_sales_label": "TỔNG DOANH SỐ BÁN HÀNG", "pdf_item_sales_label": "Báo cáo bán hàng: Theo mặt hàng", "pdf_tax_report_label": "BÁO CÁO THUẾ", "pdf_total_tax_label": "TỔNG THUẾ", "pdf_tax_types_label": "Các loại thuế", "pdf_expenses_label": "Chi phí", - "pdf_bill_to": "Hoa đơn để,", - "pdf_ship_to": "Tàu,", - "pdf_received_from": "Nhận được tư:" + "pdf_bill_to": "Xuất từ,", + "pdf_ship_to": "Chuyển tới,", + "pdf_received_from": "Nhận từ:", + "pdf_tax_label": "Thuế" } diff --git a/resources/scripts/main.js b/resources/scripts/main.js new file mode 100644 index 000000000..4f0b6f272 --- /dev/null +++ b/resources/scripts/main.js @@ -0,0 +1,15 @@ +import '../sass/crater.scss' +import 'v-tooltip/dist/v-tooltip.css' +import '@/scripts/plugins/axios.js' +import * as pinia from 'pinia' +import * as Vue from 'vue' +import * as router from 'vue-router' + +window.pinia = pinia + +import Crater from './Crater' + +window.Vue = Vue +window.router = router + +window.Crater = new Crater() diff --git a/resources/scripts/plugins/axios.js b/resources/scripts/plugins/axios.js new file mode 100644 index 000000000..01a817a8e --- /dev/null +++ b/resources/scripts/plugins/axios.js @@ -0,0 +1,25 @@ +import axios from 'axios' +import Ls from '@/scripts/services/ls.js' + +window.Ls = Ls +window.axios = axios +axios.defaults.withCredentials = true + +axios.defaults.headers.common = { + 'X-Requested-With': 'XMLHttpRequest', +} + +/** + * Interceptors + */ + +axios.interceptors.request.use(function (config) { + // Pass selected company to header on all requests + const companyId = Ls.get('selectedCompany') + + if (companyId) { + config.headers.common['company'] = companyId + } + + return config +}) diff --git a/resources/scripts/plugins/i18n.js b/resources/scripts/plugins/i18n.js new file mode 100644 index 000000000..1cb43284e --- /dev/null +++ b/resources/scripts/plugins/i18n.js @@ -0,0 +1,9 @@ +import { createI18n } from 'vue-i18n' + +export default (messages) => { + return createI18n({ + locale: 'en', + fallbackLocale: 'en', + messages + }) +} diff --git a/resources/scripts/router/index.js b/resources/scripts/router/index.js new file mode 100644 index 000000000..b25552931 --- /dev/null +++ b/resources/scripts/router/index.js @@ -0,0 +1,480 @@ +import { createRouter, createWebHistory } from 'vue-router' +import { useUserStore } from '@/scripts/stores/user' +import { useGlobalStore } from '@/scripts/stores/global' +import LayoutBasic from '@/scripts/layouts/LayoutBasic.vue' +import LayoutLogin from '@/scripts/layouts/LayoutLogin.vue' +import abilities from '@/scripts/stub/abilities' + +const LayoutInstallation = () => + import('@/scripts/layouts/LayoutInstallation.vue') + +const Login = () => import('@/scripts/views/auth/Login.vue') +const ResetPassword = () => import('@/scripts/views/auth/ResetPassword.vue') +const ForgotPassword = () => import('@/scripts/views/auth/ForgotPassword.vue') + +// Dashboard +const Dashboard = () => import('@/scripts/views/dashboard/Dashboard.vue') + +// Customers +const CustomerIndex = () => import('@/scripts/views/customers/Index.vue') +const CustomerCreate = () => import('@/scripts/views/customers/Create.vue') +const CustomerView = () => import('@/scripts/views/customers/View.vue') + +//Settings +const SettingsIndex = () => import('@/scripts/views/settings/SettingsIndex.vue') +const AccountSetting = () => + import('@/scripts/views/settings/AccountSetting.vue') +const CompanyInfo = () => + import('@/scripts/views/settings/CompanyInfoSettings.vue') +const Preferences = () => + import('@/scripts/views/settings/PreferencesSetting.vue') +const Customization = () => + import('@/scripts/views/settings/customization/CustomizationSetting.vue') +const Notifications = () => + import('@/scripts/views/settings/NotificationsSetting.vue') +const TaxTypes = () => import('@/scripts/views/settings/TaxTypesSetting.vue') +const PaymentMode = () => + import('@/scripts/views/settings/PaymentsModeSetting.vue') +const CustomFieldsIndex = () => + import('@/scripts/views/settings/CustomFieldsSetting.vue') +const NotesSetting = () => import('@/scripts/views/settings/NotesSetting.vue') +const ExpenseCategory = () => + import('@/scripts/views/settings/ExpenseCategorySetting.vue') +const ExchangeRateSetting = () => + import('@/scripts/views/settings/ExchangeRateProviderSetting.vue') +const MailConfig = () => + import('@/scripts/views/settings/MailConfigSetting.vue') +const FileDisk = () => import('@/scripts/views/settings/FileDiskSetting.vue') +const Backup = () => import('@/scripts/views/settings/BackupSetting.vue') +const UpdateApp = () => import('@/scripts/views/settings/UpdateAppSetting.vue') +const RolesSettings = () => import('@/scripts/views/settings/RolesSettings.vue') + +// Items +const ItemsIndex = () => import('@/scripts/views/items/Index.vue') +const ItemCreate = () => import('@/scripts/views/items/Create.vue') + +// Expenses +const ExpensesIndex = () => import('@/scripts/views/expenses/Index.vue') +const ExpenseCreate = () => import('@/scripts/views/expenses/Create.vue') + +// Users +const UserIndex = () => import('@/scripts/views/users/Index.vue') +const UserCreate = () => import('@/scripts/views/users/Create.vue') + +// Estimates +const EstimateIndex = () => import('@/scripts/views/estimates/Index.vue') +const EstimateCreate = () => + import('@/scripts/views/estimates/create/EstimateCreate.vue') +const EstimateView = () => import('@/scripts/views/estimates/View.vue') + +// Payments +const PaymentsIndex = () => import('@/scripts/views/payments/Index.vue') +const PaymentCreate = () => import('@/scripts/views/payments/Create.vue') +const PaymentView = () => import('@/scripts/views/payments/View.vue') + +const NotFoundPage = () => import('@/scripts/views/errors/404.vue') + +// Invoice +const InvoiceIndex = () => import('@/scripts/views/invoices/Index.vue') +const InvoiceCreate = () => + import('@/scripts/views/invoices/create/InvoiceCreate.vue') +const InvoiceView = () => import('@/scripts/views/invoices/View.vue') + +// Recurring Invoice +const RecurringInvoiceIndex = () => + import('@/scripts/views/recurring-invoices/Index.vue') +const RecurringInvoiceCreate = () => + import('@/scripts/views/recurring-invoices/create/RecurringInvoiceCreate.vue') +const RecurringInvoiceView = () => + import('@/scripts/views/recurring-invoices/View.vue') + +// Reports +const ReportsIndex = () => import('@/scripts/views/reports/layout/Index.vue') + +// Installation +const Installation = () => + import('@/scripts/views/installation/Installation.vue') + +let routes = [ + { + path: '/installation', + component: LayoutInstallation, + meta: { requiresAuth: false }, + children: [ + { + path: '/installation', + component: Installation, + name: 'installation', + }, + ], + }, + { + path: '/', + component: LayoutLogin, + meta: { requiresAuth: false, redirectIfAuthenticated: true }, + children: [ + { + path: '/', + component: Login, + }, + { + path: 'login', + name: 'login', + component: Login, + }, + { + path: 'forgot-password', + component: ForgotPassword, + name: 'forgot-password', + }, + { + path: '/reset-password/:token', + component: ResetPassword, + name: 'reset-password', + }, + ], + }, + { + path: '/admin', + component: LayoutBasic, + meta: { requiresAuth: true }, + children: [ + { + path: 'dashboard', + name: 'dashboard', + meta: { ability: abilities.DASHBOARD }, + component: Dashboard, + }, + + // Customers + { + path: 'customers', + meta: { ability: abilities.VIEW_CUSTOMER }, + component: CustomerIndex, + }, + { + path: 'customers/create', + name: 'customers.create', + meta: { ability: abilities.CREATE_CUSTOMER }, + component: CustomerCreate, + }, + { + path: 'customers/:id/edit', + name: 'customers.edit', + meta: { ability: abilities.EDIT_CUSTOMER }, + component: CustomerCreate, + }, + { + path: 'customers/:id/view', + name: 'customers.view', + meta: { ability: abilities.VIEW_CUSTOMER }, + component: CustomerView, + }, + // Payments + { + path: 'payments', + meta: { ability: abilities.VIEW_PAYMENT }, + component: PaymentsIndex, + }, + { + path: 'payments/create', + name: 'payments.create', + meta: { ability: abilities.CREATE_PAYMENT }, + component: PaymentCreate, + }, + { + path: 'payments/:id/create', + name: 'invoice.payments.create', + meta: { ability: abilities.CREATE_PAYMENT }, + component: PaymentCreate, + }, + { + path: 'payments/:id/edit', + name: 'payments.edit', + meta: { ability: abilities.EDIT_PAYMENT }, + component: PaymentCreate, + }, + { + path: 'payments/:id/view', + name: 'payments.view', + meta: { ability: abilities.VIEW_PAYMENT }, + component: PaymentView, + }, + + //settings + { + path: 'settings', + name: 'settings', + component: SettingsIndex, + children: [ + { + path: 'account-settings', + name: 'account.settings', + component: AccountSetting, + }, + { + path: 'company-info', + name: 'company.info', + meta: { isOwner: true }, + component: CompanyInfo, + }, + { + path: 'preferences', + name: 'preferences', + meta: { isOwner: true }, + component: Preferences, + }, + { + path: 'customization', + name: 'customization', + meta: { isOwner: true }, + component: Customization, + }, + { + path: 'notifications', + name: 'notifications', + meta: { isOwner: true }, + component: Notifications, + }, + { + path: 'roles-settings', + name: 'roles.settings', + meta: { isOwner: true }, + component: RolesSettings, + }, + { + path: 'exchange-rate-provider', + name: 'exchange.rate.provider', + meta: { ability: abilities.VIEW_EXCHANGE_RATE }, + component: ExchangeRateSetting, + }, + { + path: 'tax-types', + name: 'tax.types', + meta: { ability: abilities.VIEW_TAX_TYPE }, + component: TaxTypes, + }, + { + path: 'notes', + name: 'notes', + meta: { ability: abilities.VIEW_ALL_NOTES }, + component: NotesSetting, + }, + { + path: 'payment-mode', + name: 'payment.mode', + component: PaymentMode, + }, + { + path: 'custom-fields', + name: 'custom.fields', + meta: { ability: abilities.VIEW_CUSTOM_FIELDS }, + component: CustomFieldsIndex, + }, + { + path: 'expense-category', + name: 'expense.category', + meta: { ability: abilities.VIEW_EXPENSE }, + component: ExpenseCategory, + }, + + { + path: 'mail-configuration', + name: 'mailconfig', + meta: { isOwner: true }, + component: MailConfig, + }, + { + path: 'file-disk', + name: 'file-disk', + meta: { isOwner: true }, + component: FileDisk, + }, + { + path: 'backup', + name: 'backup', + meta: { isOwner: true }, + component: Backup, + }, + { + path: 'update-app', + name: 'updateapp', + meta: { isOwner: true }, + component: UpdateApp, + }, + ], + }, + + // Items + { + path: 'items', + meta: { ability: abilities.VIEW_ITEM }, + component: ItemsIndex, + }, + { + path: 'items/create', + name: 'items.create', + meta: { ability: abilities.CREATE_ITEM }, + component: ItemCreate, + }, + { + path: 'items/:id/edit', + name: 'items.edit', + meta: { ability: abilities.EDIT_ITEM }, + component: ItemCreate, + }, + + // Expenses + { + path: 'expenses', + meta: { ability: abilities.VIEW_EXPENSE }, + component: ExpensesIndex, + }, + { + path: 'expenses/create', + name: 'expenses.create', + meta: { ability: abilities.CREATE_EXPENSE }, + component: ExpenseCreate, + }, + { + path: 'expenses/:id/edit', + name: 'expenses.edit', + meta: { ability: abilities.EDIT_EXPENSE }, + component: ExpenseCreate, + }, + + // Users + { + path: 'users', + name: 'users.index', + meta: { isOwner: true }, + component: UserIndex, + }, + { + path: 'users/create', + meta: { isOwner: true }, + name: 'users.create', + component: UserCreate, + }, + { + path: 'users/:id/edit', + name: 'users.edit', + meta: { isOwner: true }, + component: UserCreate, + }, + + // Estimates + { + path: 'estimates', + name: 'estimates.index', + meta: { ability: abilities.VIEW_ESTIMATE }, + component: EstimateIndex, + }, + { + path: 'estimates/create', + name: 'estimates.create', + meta: { ability: abilities.CREATE_ESTIMATE }, + component: EstimateCreate, + }, + { + path: 'estimates/:id/view', + name: 'estimates.view', + meta: { ability: abilities.VIEW_ESTIMATE }, + component: EstimateView, + }, + { + path: 'estimates/:id/edit', + name: 'estimates.edit', + meta: { ability: abilities.EDIT_ESTIMATE }, + component: EstimateCreate, + }, + + // Invoices + { + path: 'invoices', + name: 'invoices.index', + meta: { ability: abilities.VIEW_INVOICE }, + component: InvoiceIndex, + }, + { + path: 'invoices/create', + name: 'invoices.create', + meta: { ability: abilities.CREATE_INVOICE }, + component: InvoiceCreate, + }, + { + path: 'invoices/:id/view', + name: 'invoices.view', + meta: { ability: abilities.VIEW_INVOICE }, + component: InvoiceView, + }, + { + path: 'invoices/:id/edit', + name: 'invoices.edit', + meta: { ability: abilities.EDIT_INVOICE }, + component: InvoiceCreate, + }, + + // Recurring Invoices + { + path: 'recurring-invoices', + name: 'recurring-invoices.index', + meta: { ability: abilities.VIEW_RECURRING_INVOICE }, + component: RecurringInvoiceIndex, + }, + { + path: 'recurring-invoices/create', + name: 'recurring-invoices.create', + meta: { ability: abilities.CREATE_RECURRING_INVOICE }, + component: RecurringInvoiceCreate, + }, + { + path: 'recurring-invoices/:id/view', + name: 'recurring-invoices.view', + meta: { ability: abilities.VIEW_RECURRING_INVOICE }, + component: RecurringInvoiceView, + }, + { + path: 'recurring-invoices/:id/edit', + name: 'recurring-invoices.edit', + meta: { ability: abilities.EDIT_RECURRING_INVOICE }, + component: RecurringInvoiceCreate, + }, + + // Reports + { + path: 'reports', + meta: { ability: abilities.VIEW_FINANCIAL_REPORT }, + component: ReportsIndex, + }, + ], + }, + { path: '/:catchAll(.*)', component: NotFoundPage }, +] + +const router = createRouter({ + history: createWebHistory(), + linkActiveClass: 'active', + routes, +}) + +router.beforeEach((to, from, next) => { + const userStore = useUserStore() + const globalStore = useGlobalStore() + let ability = to.meta.ability + const { isAppLoaded } = globalStore + + if (ability && isAppLoaded && to.meta.requiresAuth) { + if (userStore.hasAbilities(ability)) { + next() + } else next({ name: 'account.settings' }) + } else if (to.meta.isOwner && isAppLoaded) { + if (userStore.currentUser.is_owner) { + next() + } else next({ name: 'dashboard' }) + } else { + next() + } +}) + +export default router diff --git a/resources/assets/js/services/ls.js b/resources/scripts/services/ls.js similarity index 100% rename from resources/assets/js/services/ls.js rename to resources/scripts/services/ls.js diff --git a/resources/scripts/shims-vue.d.ts b/resources/scripts/shims-vue.d.ts new file mode 100644 index 000000000..1500dfd74 --- /dev/null +++ b/resources/scripts/shims-vue.d.ts @@ -0,0 +1,7 @@ +// This is required for Visual Studio Code to recognize +// imported .vue files +declare module '*.vue' { + import { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/resources/scripts/stores/auth.js b/resources/scripts/stores/auth.js new file mode 100644 index 000000000..878b788f0 --- /dev/null +++ b/resources/scripts/stores/auth.js @@ -0,0 +1,74 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import { useResetStore } from './reset' +import router from '@/scripts/router' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useAuthStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + const resetStore = useResetStore() + + return defineStoreFunc({ + id: 'auth', + state: () => ({ + status: '', + + loginData: { + email: '', + password: '', + remember: '', + }, + }), + + actions: { + login(data) { + return new Promise((resolve, reject) => { + axios.get('/sanctum/csrf-cookie').then((response) => { + if (response) { + axios + .post('/login', data) + .then((response) => { + resolve(response) + + setTimeout(() => { + this.loginData.email = '' + this.loginData.password = '' + }, 1000) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + } + }) + }) + }, + + logout() { + return new Promise((resolve, reject) => { + axios + .get('/auth/logout') + .then((response) => { + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: 'Logged out successfully.', + }) + + router.push('/login') + resetStore.clearPinia() + resolve(response) + }) + .catch((err) => { + handleError(err) + router.push('/') + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/backup.js b/resources/scripts/stores/backup.js new file mode 100644 index 000000000..a31373cc5 --- /dev/null +++ b/resources/scripts/stores/backup.js @@ -0,0 +1,76 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useBackupStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'backup', + + state: () => ({ + backups: [], + currentBackupData: { + option: 'full', + selected_disk: null, + }, + }), + + actions: { + fetchBackups(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/backups`, { params }) + .then((response) => { + this.backups = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + createBackup(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/backups`, data) + .then((response) => { + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.backup.created_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + removeBackup(params) { + return new Promise((resolve, reject) => { + axios + .delete(`/api/v1/backups/${params.disk}`, { params }) + .then((response) => { + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.backup.deleted_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/category.js b/resources/scripts/stores/category.js new file mode 100644 index 000000000..649f1912c --- /dev/null +++ b/resources/scripts/stores/category.js @@ -0,0 +1,128 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from '@/scripts/stores/notification' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useCategoryStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'category', + + state: () => ({ + categories: [], + currentCategory: { + id: null, + name: '', + description: '', + }, + }), + + getters: { + isEdit: (state) => (state.currentCategory.id ? true : false), + }, + + actions: { + fetchCategories(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/categories`, { params }) + .then((response) => { + this.categories = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchCategory(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/categories/${id}`) + .then((response) => { + this.currentCategory = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addCategory(data) { + return new Promise((resolve, reject) => { + window.axios + .post('/api/v1/categories', data) + .then((response) => { + this.categories.push(response.data.data) + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.expense_category.created_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateCategory(data) { + return new Promise((resolve, reject) => { + window.axios + .put(`/api/v1/categories/${data.id}`, data) + .then((response) => { + if (response.data) { + let pos = this.categories.findIndex( + (category) => category.id === response.data.data.id + ) + this.categories[pos] = data.categories + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t( + 'settings.expense_category.updated_message' + ), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteCategory(id) { + return new Promise((resolve) => { + axios + .delete(`/api/v1/categories/${id}`) + .then((response) => { + let index = this.categories.findIndex( + (category) => category.id === id + ) + this.categories.splice(index, 1) + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.expense_category.deleted_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + console.error(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/company.js b/resources/scripts/stores/company.js new file mode 100644 index 000000000..fd563efa7 --- /dev/null +++ b/resources/scripts/stores/company.js @@ -0,0 +1,189 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import { handleError } from '@/scripts/helpers/error-handling' +import Ls from '../services/ls' + +export const useCompanyStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'company', + + state: () => ({ + companies: [], + selectedCompany: null, + selectedCompanySettings: {}, + selectedCompanyCurrency: null, + }), + + actions: { + setSelectedCompany(data) { + window.Ls.set('selectedCompany', data.id) + this.selectedCompany = data + }, + + fetchBasicMailConfig() { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/company/mail/config') + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateCompany(data) { + return new Promise((resolve, reject) => { + axios + .put('/api/v1/company', data) + .then((response) => { + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.company_info.updated_message'), + }) + + this.selectedCompany = response.data.data + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateCompanyLogo(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/company/upload-logo', data) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addNewCompany(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/companies', data) + .then((response) => { + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('company_switcher.created_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchCompany(params) { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/current-company', params) + .then((response) => { + Object.assign(this.companyForm, response.data.data.address) + this.companyForm.name = response.data.data.name + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchUserCompanies() { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/companies') + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchCompanySettings(settings) { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/company/settings', { + params: { + settings, + }, + }) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateCompanySettings({ data, message }) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/company/settings', data) + .then((response) => { + Object.assign(this.selectedCompanySettings, data.settings) + + if (message) { + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: global.t(message), + }) + } + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteCompany(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/companies/delete`, data) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + setDefaultCurrency(data) { + this.defaultCurrency = data.currency + }, + }, + })() +} diff --git a/resources/scripts/stores/custom-field.js b/resources/scripts/stores/custom-field.js new file mode 100644 index 000000000..42f80237e --- /dev/null +++ b/resources/scripts/stores/custom-field.js @@ -0,0 +1,211 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import customFieldStub from '@/scripts/stub/custom-field' +import utilities from '../helpers/utilities' +import { util } from 'prettier' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useCustomFieldStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'custom-field', + + state: () => ({ + customFields: [], + isRequestOngoing: false, + + currentCustomField: { + ...customFieldStub, + }, + }), + + getters: { + isEdit() { + return this.currentCustomField.id ? true : false + }, + }, + + actions: { + resetCustomFields() { + this.customFields = [] + }, + + resetCurrentCustomField() { + this.currentCustomField = { + ...customFieldStub, + } + }, + + fetchCustomFields(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/custom-fields`, { params }) + .then((response) => { + this.customFields = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchNoteCustomFields(params) { + return new Promise((resolve, reject) => { + if (this.isRequestOngoing) { + resolve({ requestOnGoing: true }) + return true + } + + this.isRequestOngoing = true + + axios + .get(`/api/v1/custom-fields`, { params }) + .then((response) => { + this.customFields = response.data.data + this.isRequestOngoing = false + resolve(response) + }) + .catch((err) => { + this.isRequestOngoing = false + handleError(err) + reject(err) + }) + }) + }, + + fetchCustomField(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/custom-fields/${id}`) + .then((response) => { + this.currentCustomField = response.data.data + + if ( + this.currentCustomField.options && + this.currentCustomField.options.length + ) { + this.currentCustomField.options = + this.currentCustomField.options.map((option) => { + return (option = { name: option }) + }) + } + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addCustomField(params) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/custom-fields`, params) + .then((response) => { + let data = { + ...response.data.data, + } + + if (data.options) { + data.options = data.options.map((option) => { + return { name: option ? option : '' } + }) + } + + this.customFields.push(data) + + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.custom_fields.added_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateCustomField(params) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/custom-fields/${params.id}`, params) + .then((response) => { + let data = { + ...response.data.data, + } + + if (data.options) { + data.options = data.options.map((option) => { + return { name: option ? option : '' } + }) + } + + let pos = this.customFields.findIndex((_f) => _f.id === data.id) + + if (this.customFields[pos]) { + this.customFields[pos] = data + } + + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.custom_fields.updated_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteCustomFields(id) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .delete(`/api/v1/custom-fields/${id}`) + .then((response) => { + let index = this.customFields.findIndex( + (field) => field.id === id + ) + + this.customFields.splice(index, 1) + + if (response.data.error) { + notificationStore.showNotification({ + type: 'error', + message: global.t('settings.custom_fields.already_in_use'), + }) + } else { + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.custom_fields.deleted_message'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + // notificationStore.showNotification({ + // type: 'error', + // message: global.t('settings.custom_fields.already_in_use'), + // }) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/customer.js b/resources/scripts/stores/customer.js new file mode 100644 index 000000000..20fcd27f6 --- /dev/null +++ b/resources/scripts/stores/customer.js @@ -0,0 +1,255 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useRoute } from 'vue-router' +import { handleError } from '@/scripts/helpers/error-handling' +import { useNotificationStore } from '@/scripts/stores/notification' +import { useGlobalStore } from '@/scripts/stores/global' +import { useCompanyStore } from '@/scripts/stores/company' +import addressStub from '@/scripts/stub/address.js' +import customerStub from '@/scripts/stub/customer' + +export const useCustomerStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'customer', + state: () => ({ + customers: [], + totalCustomers: 0, + selectAllField: false, + selectedCustomers: [], + selectedViewCustomer: {}, + isFetchingInitialSettings: false, + isFetchingViewData: false, + currentCustomer: { + ...customerStub(), + }, + }), + + getters: { + isEdit: (state) => (state.currentCustomer.id ? true : false), + }, + + actions: { + resetCurrentCustomer() { + this.currentCustomer = { + ...customerStub(), + } + }, + + copyAddress() { + this.currentCustomer.shipping = { + ...this.currentCustomer.billing, + type: 'shipping', + } + }, + + fetchCustomerInitialSettings(isEdit) { + const route = useRoute() + const globalStore = useGlobalStore() + const companyStore = useCompanyStore() + + this.isFetchingInitialSettings = true + let editActions = [] + if (isEdit) { + editActions = [this.fetchCustomer(route.params.id)] + } else { + this.currentCustomer.currency_id = + companyStore.selectedCompanyCurrency.id + } + + Promise.all([ + globalStore.fetchCurrencies(), + globalStore.fetchCountries(), + ...editActions, + ]) + .then(async ([res1, res2, res3]) => { + this.isFetchingInitialSettings = false + }) + .catch((error) => { + handleError(error) + }) + }, + + fetchCustomers(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/customers`, { params }) + .then((response) => { + this.customers = response.data.data + this.totalCustomers = response.data.meta.customer_total_count + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchViewCustomer(params) { + return new Promise((resolve, reject) => { + this.isFetchingViewData = true + axios + .get(`/api/v1/customers/${params.id}/stats`, { params }) + + .then((response) => { + this.selectedViewCustomer = {} + Object.assign(this.selectedViewCustomer, response.data.data) + this.setAddressStub(response.data.data) + this.isFetchingViewData = false + resolve(response) + }) + .catch((err) => { + this.isFetchingViewData = false + handleError(err) + reject(err) + }) + }) + }, + + fetchCustomer(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/customers/${id}`) + .then((response) => { + Object.assign(this.currentCustomer, response.data.data) + this.setAddressStub(response.data.data) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addCustomer(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/customers', data) + .then((response) => { + this.customers.push(response.data.data) + + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('customers.created_message'), + }) + resolve(response) + }) + + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateCustomer(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/customers/${data.id}`, data) + .then((response) => { + if (response.data) { + let pos = this.customers.findIndex( + (customer) => customer.id === response.data.data.id + ) + this.customers[pos] = data + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('customers.updated_message'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteCustomer(id) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/customers/delete`, id) + .then((response) => { + let index = this.customers.findIndex( + (customer) => customer.id === id + ) + this.customers.splice(index, 1) + notificationStore.showNotification({ + type: 'success', + message: global.tc('customers.deleted_message', 1), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteMultipleCustomers() { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/customers/delete`, { ids: this.selectedCustomers }) + .then((response) => { + this.selectedCustomers.forEach((customer) => { + let index = this.customers.findIndex( + (_customer) => _customer.id === customer.id + ) + this.customers.splice(index, 1) + }) + + notificationStore.showNotification({ + type: 'success', + message: global.tc('customers.deleted_message', 2), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + setSelectAllState(data) { + this.selectAllField = data + }, + + selectCustomer(data) { + this.selectedCustomers = data + if (this.selectedCustomers.length === this.customers.length) { + this.selectAllField = true + } else { + this.selectAllField = false + } + }, + + selectAllCustomers() { + if (this.selectedCustomers.length === this.customers.length) { + this.selectedCustomers = [] + this.selectAllField = false + } else { + let allCustomerIds = this.customers.map((customer) => customer.id) + this.selectedCustomers = allCustomerIds + this.selectAllField = true + } + }, + + setAddressStub(data) { + if (!data.billing) this.currentCustomer.billing = { ...addressStub } + if (!data.shipping) this.currentCustomer.shipping = { ...addressStub } + }, + }, + })() +} diff --git a/resources/scripts/stores/dashboard.js b/resources/scripts/stores/dashboard.js new file mode 100644 index 000000000..cddb9b90c --- /dev/null +++ b/resources/scripts/stores/dashboard.js @@ -0,0 +1,86 @@ +import { defineStore } from 'pinia' +import { useGlobalStore } from '@/scripts/stores/global' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useDashboardStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'dashboard', + + state: () => ({ + stats: { + totalAmountDue: 0, + totalCustomerCount: 0, + totalInvoiceCount: 0, + totalEstimateCount: 0, + }, + + chartData: { + months: [], + invoiceTotals: [], + expenseTotals: [], + receiptTotals: [], + netIncomeTotals: [], + }, + + totalSales: null, + totalReceipts: null, + totalExpenses: null, + totalNetIncome: null, + + recentDueInvoices: [], + recentEstimates: [], + + isDashboardDataLoaded: false, + }), + + actions: { + loadData(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/dashboard`, { params }) + .then((response) => { + // Stats + this.stats.totalAmountDue = response.data.total_amount_due + this.stats.totalCustomerCount = response.data.total_customer_count + this.stats.totalInvoiceCount = response.data.total_invoice_count + this.stats.totalEstimateCount = response.data.total_estimate_count + + // Dashboard Chart + if (this.chartData && response.data.chart_data) { + this.chartData.months = response.data.chart_data.months + this.chartData.invoiceTotals = + response.data.chart_data.invoice_totals + this.chartData.expenseTotals = + response.data.chart_data.expense_totals + this.chartData.receiptTotals = + response.data.chart_data.receipt_totals + this.chartData.netIncomeTotals = + response.data.chart_data.net_income_totals + } + + // Dashboard Chart Labels + this.totalSales = response.data.total_sales + this.totalReceipts = response.data.total_receipts + this.totalExpenses = response.data.total_expenses + this.totalNetIncome = response.data.total_net_income + + // Dashboard Table Data + this.recentDueInvoices = response.data.recent_due_invoices + this.recentEstimates = response.data.recent_estimates + + this.isDashboardDataLoaded = true + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/dialog.js b/resources/scripts/stores/dialog.js new file mode 100644 index 000000000..7057f7f62 --- /dev/null +++ b/resources/scripts/stores/dialog.js @@ -0,0 +1,49 @@ +import { defineStore } from 'pinia' + +export const useDialogStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'dialog', + state: () => ({ + active: false, + title: '', + message: '', + size: 'md', + data: null, + variant: 'danger', // primary || danger + yesLabel: global.t('settings.custom_fields.yes'), + noLabel: global.t('settings.custom_fields.no'), + noLabel: 'No', + resolve: null, + hideNoButton: false, + }), + actions: { + openDialog(data) { + this.active = true + this.title = data.title + this.message = data.message + this.size = data.size + this.data = data.data + this.variant = data.variant + this.yesLabel = data.yesLabel + this.noLabel = data.noLabel + this.hideNoButton = data.hideNoButton + + return new Promise((resolve, reject) => { + this.resolve = resolve + }) + }, + closeDialog() { + this.active = false + + setTimeout(() => { + this.title = '' + this.message = '' + this.data = null + }, 300) + }, + }, + })() +} diff --git a/resources/scripts/stores/disk.js b/resources/scripts/stores/disk.js new file mode 100644 index 000000000..769197df0 --- /dev/null +++ b/resources/scripts/stores/disk.js @@ -0,0 +1,183 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from '@/scripts/stores/notification' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useDiskStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'disk', + + state: () => ({ + disks: [], + diskDrivers: [], + diskConfigData: null, + selected_driver: 'local', + + doSpaceDiskConfig: { + name: '', + selected_driver: 'doSpaces', + key: '', + secret: '', + region: '', + bucket: '', + endpoint: '', + root: '', + }, + + dropBoxDiskConfig: { + name: '', + selected_driver: 'dropbox', + token: '', + key: '', + secret: '', + app: '', + }, + + localDiskConfig: { + name: '', + selected_driver: 'local', + root: '', + }, + + s3DiskConfigData: { + name: '', + selected_driver: 's3', + key: '', + secret: '', + region: '', + bucket: '', + root: '', + }, + }), + + getters: { + getDiskDrivers: (state) => state.diskDrivers, + }, + + actions: { + fetchDiskEnv(data) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/disks/${data.disk}`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchDisks(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/disks`, { params }) + .then((response) => { + this.disks = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchDiskDrivers() { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/disk/drivers`) + .then((response) => { + this.diskConfigData = response.data + this.diskDrivers = response.data.drivers + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteFileDisk(id) { + return new Promise((resolve, reject) => { + axios + .delete(`/api/v1/disks/${id}`) + .then((response) => { + if (response.data.success) { + let index = this.disks.findIndex( + (category) => category.id === id + ) + this.disks.splice(index, 1) + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.disk.deleted_message'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateDisk(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/disks/${data.id}`, data) + .then((response) => { + if (response.data) { + let pos = this.disks.findIndex( + (disk) => disk.id === response.data.data + ) + this.disks[pos] = data.disks + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.disk.success_set_default_disk'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + createDisk(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/disks`, data) + .then((response) => { + if (response.data) { + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.disk.success_create'), + }) + } + this.disks.push(response.data) + resolve(response) + }) + .catch((err) => { + /* notificationStore.showNotification({ + type: 'error', + message: global.t('settings.disk.invalid_disk_credentials'), + }) */ + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/estimate.js b/resources/scripts/stores/estimate.js new file mode 100644 index 000000000..a373bbe38 --- /dev/null +++ b/resources/scripts/stores/estimate.js @@ -0,0 +1,530 @@ +import axios from 'axios' +import moment from 'moment' +import Guid from 'guid' +import _ from 'lodash' +import { defineStore } from 'pinia' +import { useRoute } from 'vue-router' +import { useCompanyStore } from './company' +import { useCustomerStore } from './customer' +import { useNotificationStore } from './notification' +import { useItemStore } from './item' +import { useTaxTypeStore } from './tax-type' +import { handleError } from '@/scripts/helpers/error-handling' +import estimateStub from '../stub/estimate' +import estimateItemStub from '../stub/estimate-item' +import taxStub from '../stub/tax' + +export const useEstimateStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'estimate', + + state: () => ({ + templates: [], + + estimates: [], + selectAllField: false, + selectedEstimates: [], + totalEstimateCount: 0, + isFetchingInitialSettings: false, + showExchangeRate: false, + + newEstimate: { + ...estimateStub(), + }, + }), + + getters: { + getSubTotal() { + return this.newEstimate.items.reduce(function (a, b) { + return a + b['total'] + }, 0) + }, + getTotalSimpleTax() { + return _.sumBy(this.newEstimate.taxes, function (tax) { + if (!tax.compound_tax) { + return tax.amount + } + return 0 + }) + }, + + getTotalCompoundTax() { + return _.sumBy(this.newEstimate.taxes, function (tax) { + if (tax.compound_tax) { + return tax.amount + } + return 0 + }) + }, + + getTotalTax() { + if ( + this.newEstimate.tax_per_item === 'NO' || + this.newEstimate.tax_per_item === null + ) { + return this.getTotalSimpleTax + this.getTotalCompoundTax + } + return _.sumBy(this.newEstimate.items, function (tax) { + return tax.tax + }) + }, + + getSubtotalWithDiscount() { + return this.getSubTotal - this.newEstimate.discount_val + }, + + getTotal() { + return this.getSubtotalWithDiscount + this.getTotalTax + }, + + isEdit: (state) => (state.newEstimate.id ? true : false), + }, + + actions: { + resetCurrentEstimate() { + this.newEstimate = { + ...estimateStub(), + } + }, + + previewEstimate(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/estimates/${params.id}/send/preview`, { params }) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchEstimates(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/estimates`, { params }) + .then((response) => { + this.estimates = response.data.data + this.totalEstimateCount = response.data.meta.estimate_total_count + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + getNextNumber(params, setState = false) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/next-number?key=estimate`, { params }) + .then((response) => { + if (setState) { + this.newEstimate.estimate_number = response.data.nextNumber + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchEstimate(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/estimates/${id}`) + .then((response) => { + Object.assign(this.newEstimate, response.data.data) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + sendEstimate(data) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/estimates/${data.id}/send`, data) + .then((response) => { + if (!data.is_preview) { + notificationStore.showNotification({ + type: 'success', + message: global.t('estimates.send_estimate_successfully'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addEstimate(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/estimates', data) + .then((response) => { + this.estimates = [...this.estimates, response.data.estimate] + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: global.t('estimates.created_message'), + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteEstimate(id) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/estimates/delete`, id) + .then((response) => { + let index = this.estimates.findIndex( + (estimate) => estimate.id === id + ) + + this.estimates.splice(index, 1) + + notificationStore.showNotification({ + type: 'success', + message: global.t('estimates.deleted_message', 1), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteMultipleEstimates(id) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/estimates/delete`, { ids: this.selectedEstimates }) + .then((response) => { + this.selectedEstimates.forEach((estimate) => { + let index = this.estimates.findIndex( + (_est) => _est.id === estimate.id + ) + this.estimates.splice(index, 1) + }) + this.selectedEstimates = [] + + notificationStore.showNotification({ + type: 'success', + message: global.tc('estimates.deleted_message', 2), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateEstimate(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/estimates/${data.id}`, data) + .then((response) => { + let pos = this.estimates.findIndex( + (estimate) => estimate.id === response.data.data.id + ) + this.estimates[pos] = response.data.data + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('estimates.updated_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + markAsAccepted(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/estimates/${data.id}/status`, data) + .then((response) => { + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: global.t('estimates.marked_as_accepted_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + markAsRejected(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/estimates/${data.id}/status`, data) + .then((response) => { + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: global.t('estimates.marked_as_rejected_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + markAsSent(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/estimates/${data.id}/status`, data) + .then((response) => { + let pos = this.estimates.findIndex( + (estimate) => estimate.id === data.id + ) + if (this.estimates[pos]) { + this.estimates[pos].status = 'SENT' + + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('estimates.mark_as_sent_successfully'), + }) + } + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + convertToInvoice(id) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/estimates/${id}/convert-to-invoice`) + .then((response) => { + notificationStore.showNotification({ + type: 'success', + message: global.t('estimates.conversion_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + searchEstimate(data) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/estimates?${data}`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + selectEstimate(data) { + this.selectedEstimates = data + if (this.selectedEstimates.length === this.estimates.length) { + this.selectAllField = true + } else { + this.selectAllField = false + } + }, + + selectAllEstimates() { + if (this.selectedEstimates.length === this.estimates.length) { + this.selectedEstimates = [] + this.selectAllField = false + } else { + let allEstimateIds = this.estimates.map((estimate) => estimate.id) + this.selectedEstimates = allEstimateIds + this.selectAllField = true + } + }, + + selectCustomer(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/customers/${id}`) + .then((response) => { + this.newEstimate.customer = response.data.data + this.newEstimate.customer_id = response.data.data.id + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + fetchEstimateTemplates(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/estimates/templates`, { params }) + .then((response) => { + this.templates = response.data.estimateTemplates + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + setTemplate(data) { + this.newEstimate.template_name = data + }, + + resetSelectedCustomer() { + this.newEstimate.customer = null + this.newEstimate.customer_id = '' + }, + + selectNote(data) { + this.newEstimate.selectedNote = null + this.newEstimate.selectedNote = data + }, + + resetSelectedNote() { + this.newEstimate.selectedNote = null + }, + + addItem() { + this.newEstimate.items.push({ + ...estimateItemStub, + id: Guid.raw(), + taxes: [{ ...taxStub, id: Guid.raw() }], + }) + }, + + updateItem(data) { + Object.assign(this.newEstimate.items[data.index], { ...data }) + }, + + removeItem(index) { + this.newEstimate.items.splice(index, 1) + }, + + deselectItem(index) { + this.newEstimate.items[index] = { + ...estimateItemStub, + id: Guid.raw(), + taxes: [{ ...taxStub, id: Guid.raw() }], + } + }, + + async fetchEstimateInitialSettings(isEdit) { + const companyStore = useCompanyStore() + const customerStore = useCustomerStore() + const itemStore = useItemStore() + const taxTypeStore = useTaxTypeStore() + const route = useRoute() + + this.isFetchingInitialSettings = true + this.newEstimate.selectedCurrency = companyStore.selectedCompanyCurrency + + if (route.query.customer) { + let response = await customerStore.fetchCustomer(route.query.customer) + this.newEstimate.customer = response.data.data + this.newEstimate.customer_id = response.data.data.id + } + + let editActions = [] + + if (!isEdit) { + this.newEstimate.tax_per_item = + companyStore.selectedCompanySettings.tax_per_item + this.newEstimate.discount_per_item = + companyStore.selectedCompanySettings.discount_per_item + this.newEstimate.estimate_date = moment().format('YYYY-MM-DD') + this.newEstimate.expiry_date = moment() + .add(7, 'days') + .format('YYYY-MM-DD') + } else { + editActions = [this.fetchEstimate(route.params.id)] + } + + Promise.all([ + itemStore.fetchItems({ + filter: {}, + orderByField: '', + orderBy: '', + }), + this.resetSelectedNote(), + this.fetchEstimateTemplates(), + this.getNextNumber(), + taxTypeStore.fetchTaxTypes({ limit: 'all' }), + ...editActions, + ]) + .then(async ([res1, res2, res3, res4, res5, res6, res7]) => { + // Create + if (!isEdit) { + if (res4.data) { + this.newEstimate.estimate_number = res4.data.nextNumber + } + + this.setTemplate(this.templates[0].name) + } + + this.isFetchingInitialSettings = false + }) + .catch((err) => { + handleError(err) + this.isFetchingInitialSettings = false + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/exchange-rate.js b/resources/scripts/stores/exchange-rate.js new file mode 100644 index 000000000..6b018daa7 --- /dev/null +++ b/resources/scripts/stores/exchange-rate.js @@ -0,0 +1,249 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useExchangeRateStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + const notificationStore = useNotificationStore() + + return defineStoreFunc({ + id: 'exchange-rate', + + state: () => ({ + supportedCurrencies: [], + drivers: [], + activeUsedCurrencies: [], + providers: [], + currencies: null, + currentExchangeRate: { + id: null, + driver: '', + key: '', + active: true, + currencies: [], + }, + currencyConverter: { + type: '', + url: '', + }, + bulkCurrencies: [], + }), + getters: { + isEdit: (state) => (state.currentExchangeRate.id ? true : false), + }, + + actions: { + fetchProviders(params) { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/exchange-rate-providers', { params }) + .then((response) => { + this.providers = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchDefaultProviders() { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/config?key=exchange_rate_drivers`) + .then((response) => { + this.drivers = response.data.exchange_rate_drivers + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchProvider(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/exchange-rate-providers/${id}`) + .then((response) => { + this.currentExchangeRate = response.data.data + this.currencyConverter = response.data.data.driver_config + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addProvider(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/exchange-rate-providers', data) + .then((response) => { + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.exchange_rate.created_message'), + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + + reject(err) + }) + }) + }, + + updateProvider(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/exchange-rate-providers/${data.id}`, data) + .then((response) => { + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.exchange_rate.updated_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteExchangeRate(id) { + return new Promise((resolve, reject) => { + axios + .delete(`/api/v1/exchange-rate-providers/${id}`) + .then((response) => { + let index = this.drivers.findIndex((driver) => driver.id === id) + this.drivers.splice(index, 1) + if (response.data.success) { + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.exchange_rate.deleted_message'), + }) + } else { + notificationStore.showNotification({ + type: 'error', + message: global.t('settings.exchange_rate.error'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + fetchCurrencies(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/supported-currencies`, { params }) + .then((response) => { + this.supportedCurrencies = response.data.supportedCurrencies + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + fetchActiveCurrency(params) { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/used-currencies', { params }) + .then((response) => { + this.activeUsedCurrencies = response.data.activeUsedCurrencies + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + fetchBulkCurrencies() { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/currencies/used') + .then((response) => { + this.bulkCurrencies = response.data.currencies.map((_m) => { + _m.exchange_rate = null + return _m + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + updateBulkExchangeRate(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/currencies/bulk-update-exchange-rate', data) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + getCurrentExchangeRate(currencyId) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/currencies/${currencyId}/exchange-rate`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + reject(err) + }) + }) + }, + getCurrencyConverterServers() { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/config?key=currency_converter_servers') + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + checkForActiveProvider(currency_id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/currencies/${currency_id}/active-provider`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/expense.js b/resources/scripts/stores/expense.js new file mode 100644 index 000000000..54637047b --- /dev/null +++ b/resources/scripts/stores/expense.js @@ -0,0 +1,238 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { handleError } from '@/scripts/helpers/error-handling' +import { useNotificationStore } from './notification' +import expenseStub from '@/scripts/stub/expense' +import utils from '@/scripts/helpers/utilities' + +export const useExpenseStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'expense', + + state: () => ({ + expenses: [], + totalExpenses: 0, + selectAllField: false, + selectedExpenses: [], + paymentModes: [], + showExchangeRate: false, + currentExpense: { + ...expenseStub, + }, + }), + + getters: { + getCurrentExpense: (state) => state.currentExpense, + getSelectedExpenses: (state) => state.selectedExpenses, + }, + + actions: { + resetCurrentExpenseData() { + this.currentExpense = { + ...expenseStub, + } + }, + + fetchExpenses(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/expenses`, { params }) + .then((response) => { + this.expenses = response.data.data + this.totalExpenses = response.data.meta.expense_total_count + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchExpense(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/expenses/${id}`) + .then((response) => { + if (response.data) { + Object.assign(this.currentExpense, response.data.data) + this.currentExpense.selectedCurrency = response.data.data.currency + + if (response.data.data.attachment_receipt) { + if ( + utils.isImageFile( + response.data.data.attachment_receipt_meta.mime_type + ) + ) { + this.currentExpense.receiptFiles = [ + { image: `/expenses/${id}/receipt` }, + ] + } else { + this.currentExpense.receiptFiles = [ + { + type: 'document', + name: response.data.data.attachment_receipt_meta + .file_name, + }, + ] + } + } else { + this.currentExpense.receiptFiles = [] + } + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addExpense(data) { + const formData = utils.toFormData(data) + + return new Promise((resolve, reject) => { + axios + .post('/api/v1/expenses', formData) + .then((response) => { + this.expenses.push(response.data) + + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: global.t('expenses.created_message'), + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateExpense({ id, data }) { + const notificationStore = useNotificationStore() + + const formData = utils.toFormData(data) + + formData.append('_method', 'PUT') + + return new Promise((resolve) => { + axios.post(`/api/v1/expenses/${id}`, formData).then((response) => { + let pos = this.expenses.findIndex( + (expense) => expense.id === response.data.id + ) + + this.expenses[pos] = data.expense + + notificationStore.showNotification({ + type: 'success', + message: global.t('expenses.updated_message'), + }) + + resolve(response) + }) + }).catch((err) => { + handleError(err) + reject(err) + }) + }, + + setSelectAllState(data) { + this.selectAllField = data + }, + + selectExpense(data) { + this.selectedExpenses = data + if (this.selectedExpenses.length === this.expenses.length) { + this.selectAllField = true + } else { + this.selectAllField = false + } + }, + + selectAllExpenses(data) { + if (this.selectedExpenses.length === this.expenses.length) { + this.selectedExpenses = [] + this.selectAllField = false + } else { + let allExpenseIds = this.expenses.map((expense) => expense.id) + this.selectedExpenses = allExpenseIds + this.selectAllField = true + } + }, + + deleteExpense(id) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/expenses/delete`, id) + .then((response) => { + let index = this.expenses.findIndex( + (expense) => expense.id === id + ) + this.expenses.splice(index, 1) + + notificationStore.showNotification({ + type: 'success', + message: global.tc('expenses.deleted_message', 1), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteMultipleExpenses() { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/expenses/delete`, { ids: this.selectedExpenses }) + .then((response) => { + this.selectedExpenses.forEach((expense) => { + let index = this.expenses.findIndex( + (_expense) => _expense.id === expense.id + ) + this.expenses.splice(index, 1) + }) + notificationStore.showNotification({ + type: 'success', + message: global.tc('expenses.deleted_message', 2), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + fetchPaymentModes(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/payment-methods`, { params }) + .then((response) => { + this.paymentModes = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/global.js b/resources/scripts/stores/global.js new file mode 100644 index 000000000..6c2f0140d --- /dev/null +++ b/resources/scripts/stores/global.js @@ -0,0 +1,209 @@ +import { defineStore } from 'pinia' +import { useCompanyStore } from './company' +import { useUserStore } from './user' +import axios from 'axios' +import { handleError } from '@/scripts/helpers/error-handling' +import _ from 'lodash' + +export const useGlobalStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'global', + state: () => ({ + // Global Configuration + config: null, + + // Global Lists + timeZones: [], + dateFormats: [], + currencies: [], + countries: [], + languages: [], + fiscalYears: [], + + // Menus + mainMenu: [], + settingMenu: [], + + // Boolean Flags + isAppLoaded: false, + isSidebarOpen: false, + areCurrenciesLoading: false, + + downloadReport: null, + }), + + getters: { + menuGroups: (state) => { + return Object.values(_.groupBy(state.mainMenu, 'group')) + }, + }, + + actions: { + bootstrap() { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/bootstrap') + .then((response) => { + const companyStore = useCompanyStore() + const userStore = useUserStore() + + this.mainMenu = response.data.main_menu + this.settingMenu = response.data.setting_menu + + this.config = response.data.config + + // user store + userStore.currentUser = response.data.current_user + userStore.currentUserSettings = + response.data.current_user_settings + userStore.currentAbilities = response.data.current_user_abilities + + // company store + companyStore.companies = response.data.companies + companyStore.selectedCompany = response.data.current_company + companyStore.setSelectedCompany(response.data.current_company) + companyStore.selectedCompanySettings = + response.data.current_company_settings + companyStore.selectedCompanyCurrency = + response.data.current_company_currency + + global.locale = + response.data.current_user_settings.language || 'en' + + this.isAppLoaded = true + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchCurrencies() { + return new Promise((resolve, reject) => { + if (this.currencies.length || this.areCurrenciesLoading) { + resolve(this.currencies) + } else { + this.areCurrenciesLoading = true + axios + .get('/api/v1/currencies') + .then((response) => { + this.currencies = response.data.data.filter((currency) => { + return (currency.name = `${currency.code} - ${currency.name}`) + }) + this.areCurrenciesLoading = false + resolve(response) + }) + .catch((err) => { + handleError(err) + this.areCurrenciesLoading = false + reject(err) + }) + } + }) + }, + + fetchConfig(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/config`, { params }) + .then((response) => { + if (response.data.languages) { + this.languages = response.data.languages + } else { + this.fiscalYears = response.data.fiscal_years + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchDateFormats() { + return new Promise((resolve, reject) => { + if (this.dateFormats.length) { + resolve(this.dateFormats) + } else { + axios + .get('/api/v1/date/formats') + .then((response) => { + this.dateFormats = response.data.date_formats + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + } + }) + }, + + fetchTimeZones() { + return new Promise((resolve, reject) => { + if (this.timeZones.length) { + resolve(this.timeZones) + } else { + axios + .get('/api/v1/timezones') + .then((response) => { + this.timeZones = response.data.time_zones + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + } + }) + }, + + fetchCountries() { + return new Promise((resolve, reject) => { + if (this.countries.length) { + resolve(this.countries) + } else { + axios + .get('/api/v1/countries') + .then((response) => { + this.countries = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + } + }) + }, + + fetchPlaceholders(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/number-placeholders`, { params }) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + setSidebarVisibility(val) { + this.isSidebarOpen = val + }, + + setIsAppLoaded(isAppLoaded) { + this.isAppLoaded = isAppLoaded + }, + }, + })() +} diff --git a/resources/scripts/stores/installation.js b/resources/scripts/stores/installation.js new file mode 100644 index 000000000..971ee10cd --- /dev/null +++ b/resources/scripts/stores/installation.js @@ -0,0 +1,172 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useCompanyStore } from './company' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useInstallationStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + const companyStore = useCompanyStore() + + return defineStoreFunc({ + id: 'installation', + + state: () => ({ + currentDataBaseData: { + database_connection: 'mysql', + database_hostname: '127.0.0.1', + database_port: '3306', + database_name: null, + database_username: null, + database_password: null, + app_url: window.location.origin, + }, + }), + + actions: { + fetchInstallationRequirements() { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/installation/requirements`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchInstallationStep() { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/installation/wizard-step`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addInstallationStep(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/installation/wizard-step`, data) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchInstallationPermissions() { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/installation/permissions`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchInstallationDatabase(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/installation/database/config`, { params }) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addInstallationDatabase(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/installation/database/config`, data) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addInstallationFinish() { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/installation/finish`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + setInstallationDomain(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/installation/set-domain`, data) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + installationLogin() { + return new Promise((resolve, reject) => { + axios.get('/sanctum/csrf-cookie').then((response) => { + if (response) { + axios + .post('/api/v1/installation/login') + .then((response) => { + companyStore.setSelectedCompany(response.data.company) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + } + }) + }) + }, + + checkAutheticated() { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/auth/check`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/invoice.js b/resources/scripts/stores/invoice.js new file mode 100644 index 000000000..ccb490bed --- /dev/null +++ b/resources/scripts/stores/invoice.js @@ -0,0 +1,483 @@ +import axios from 'axios' +import moment from 'moment' +import Guid from 'guid' +import _ from 'lodash' +import { defineStore } from 'pinia' +import { useRoute } from 'vue-router' +import { handleError } from '@/scripts/helpers/error-handling' +import invoiceItemStub from '../stub/invoice-item' +import taxStub from '../stub/tax' +import invoiceStub from '../stub/invoice' + +import { useNotificationStore } from './notification' +import { useCustomerStore } from './customer' +import { useTaxTypeStore } from './tax-type' +import { useCompanyStore } from './company' +import { useItemStore } from './item' + +export const useInvoiceStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + const notificationStore = useNotificationStore() + + return defineStoreFunc({ + id: 'invoice', + state: () => ({ + templates: [], + invoices: [], + selectedInvoices: [], + selectAllField: false, + invoiceTotalCount: 0, + showExchangeRate: false, + isFetchingInitialSettings: false, + isFetchingInvoice: false, + + newInvoice: { + ...invoiceStub(), + }, + }), + + getters: { + getInvoice: (state) => (id) => { + let invId = parseInt(id) + return state.invoices.find((invoice) => invoice.id === invId) + }, + + getSubTotal() { + return this.newInvoice.items.reduce(function (a, b) { + return a + b['total'] + }, 0) + }, + + getTotalSimpleTax() { + return _.sumBy(this.newInvoice.taxes, function (tax) { + if (!tax.compound_tax) { + return tax.amount + } + return 0 + }) + }, + + getTotalCompoundTax() { + return _.sumBy(this.newInvoice.taxes, function (tax) { + if (tax.compound_tax) { + return tax.amount + } + return 0 + }) + }, + + getTotalTax() { + if ( + this.newInvoice.tax_per_item === 'NO' || + this.newInvoice.tax_per_item === null + ) { + return this.getTotalSimpleTax + this.getTotalCompoundTax + } + return _.sumBy(this.newInvoice.items, function (tax) { + return tax.tax + }) + }, + + getSubtotalWithDiscount() { + return this.getSubTotal - this.newInvoice.discount_val + }, + + getTotal() { + return this.getSubtotalWithDiscount + this.getTotalTax + }, + + isEdit: (state) => (state.newInvoice.id ? true : false), + }, + + actions: { + resetCurrentInvoice() { + this.newInvoice = { + ...invoiceStub(), + } + }, + + previewInvoice(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/invoices/${params.id}/send/preview`, { params }) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchInvoices(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/invoices`, { params }) + .then((response) => { + this.invoices = response.data.data + this.invoiceTotalCount = response.data.meta.invoice_total_count + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchInvoice(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/invoices/${id}`) + .then((response) => { + Object.assign(this.newInvoice, response.data.data) + this.newInvoice.customer = response.data.data.customer + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + sendInvoice(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/invoices/${data.id}/send`, data) + .then((response) => { + notificationStore.showNotification({ + type: 'success', + message: global.t('invoices.invoice_sent_successfully'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addInvoice(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/invoices', data) + .then((response) => { + this.invoices = [...this.invoices, response.data.invoice] + + notificationStore.showNotification({ + type: 'success', + message: global.t('invoices.created_message'), + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteInvoice(id) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/invoices/delete`, id) + .then((response) => { + let index = this.invoices.findIndex( + (invoice) => invoice.id === id + ) + this.invoices.splice(index, 1) + + notificationStore.showNotification({ + type: 'success', + message: global.t('invoices.deleted_message', 1), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteMultipleInvoices(id) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/invoices/delete`, { ids: this.selectedInvoices }) + .then((response) => { + this.selectedInvoices.forEach((invoice) => { + let index = this.invoices.findIndex( + (_inv) => _inv.id === invoice.id + ) + this.invoices.splice(index, 1) + }) + this.selectedInvoices = [] + + notificationStore.showNotification({ + type: 'success', + message: global.tc('invoices.deleted_message', 2), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateInvoice(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/invoices/${data.id}`, data) + .then((response) => { + let pos = this.invoices.findIndex( + (invoice) => invoice.id === response.data.data.id + ) + this.invoices[pos] = response.data.data + + notificationStore.showNotification({ + type: 'success', + message: global.t('invoices.updated_message'), + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + cloneInvoice(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/invoices/${data.id}/clone`, data) + .then((response) => { + notificationStore.showNotification({ + type: 'success', + message: global.t('invoices.cloned_successfully'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + markAsSent(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/invoices/${data.id}/status`, data) + .then((response) => { + notificationStore.showNotification({ + type: 'success', + message: global.t('invoices.mark_as_sent_successfully'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + getNextNumber(params, setState = false) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/next-number?key=invoice`, { params }) + .then((response) => { + if (setState) { + this.newInvoice.invoice_number = response.data.nextNumber + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + searchInvoice(data) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/invoices?${data}`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + selectInvoice(data) { + this.selectedInvoices = data + if (this.selectedInvoices.length === this.invoices.length) { + this.selectAllField = true + } else { + this.selectAllField = false + } + }, + + selectAllInvoices() { + if (this.selectedInvoices.length === this.invoices.length) { + this.selectedInvoices = [] + this.selectAllField = false + } else { + let allInvoiceIds = this.invoices.map((invoice) => invoice.id) + this.selectedInvoices = allInvoiceIds + this.selectAllField = true + } + }, + + selectCustomer(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/customers/${id}`) + .then((response) => { + this.newInvoice.customer = response.data.data + this.newInvoice.customer_id = response.data.data.id + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchInvoiceTemplates(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/invoices/templates`, { params }) + .then((response) => { + this.templates = response.data.invoiceTemplates + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + selectNote(data) { + this.newInvoice.selectedNote = null + this.newInvoice.selectedNote = data + }, + + setTemplate(data) { + this.newInvoice.template_name = data + }, + + resetSelectedCustomer() { + this.newInvoice.customer = null + this.newInvoice.customer_id = null + }, + + addItem() { + this.newInvoice.items.push({ + ...invoiceItemStub, + id: Guid.raw(), + taxes: [{ ...taxStub, id: Guid.raw() }], + }) + }, + + updateItem(data) { + Object.assign(this.newInvoice.items[data.index], { ...data }) + }, + + removeItem(index) { + this.newInvoice.items.splice(index, 1) + }, + + deselectItem(index) { + this.newInvoice.items[index] = { + ...invoiceItemStub, + id: Guid.raw(), + taxes: [{ ...taxStub, id: Guid.raw() }], + } + }, + + resetSelectedNote() { + this.newInvoice.selectedNote = null + }, + + // On Load actions + async fetchInvoiceInitialSettings(isEdit) { + const companyStore = useCompanyStore() + const customerStore = useCustomerStore() + const itemStore = useItemStore() + const taxTypeStore = useTaxTypeStore() + const route = useRoute() + + this.isFetchingInitialSettings = true + + this.newInvoice.selectedCurrency = companyStore.selectedCompanyCurrency + + if (route.query.customer) { + let response = await customerStore.fetchCustomer(route.query.customer) + this.newInvoice.customer = response.data.data + this.newInvoice.customer_id = response.data.data.id + } + + let editActions = [] + + if (!isEdit) { + this.newInvoice.tax_per_item = + companyStore.selectedCompanySettings.tax_per_item + this.newInvoice.discount_per_item = + companyStore.selectedCompanySettings.discount_per_item + this.newInvoice.invoice_date = moment().format('YYYY-MM-DD') + this.newInvoice.due_date = moment() + .add(7, 'days') + .format('YYYY-MM-DD') + } else { + editActions = [this.fetchInvoice(route.params.id)] + } + + Promise.all([ + itemStore.fetchItems({ + filter: {}, + orderByField: '', + orderBy: '', + }), + this.resetSelectedNote(), + this.fetchInvoiceTemplates(), + this.getNextNumber(), + taxTypeStore.fetchTaxTypes({ limit: 'all' }), + ...editActions, + ]) + .then(async ([res1, res2, res3, res4, res5, res6]) => { + if (!isEdit) { + if (res4.data) { + this.newInvoice.invoice_number = res4.data.nextNumber + } + + if (res3.data) { + this.setTemplate(this.templates[0].name) + } + } + + this.isFetchingInitialSettings = false + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/item.js b/resources/scripts/stores/item.js new file mode 100644 index 000000000..12abe7688 --- /dev/null +++ b/resources/scripts/stores/item.js @@ -0,0 +1,336 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useItemStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'item', + state: () => ({ + items: [], + totalItems: 0, + selectAllField: false, + selectedItems: [], + itemUnits: [], + currentItemUnit: { + id: null, + name: '', + }, + currentItem: { + name: '', + description: '', + price: 0, + unit_id: '', + unit: null, + taxes: [], + tax_per_item: false, + }, + }), + getters: { + isItemUnitEdit: (state) => (state.currentItemUnit.id ? true : false), + }, + actions: { + resetCurrentItem() { + this.currentItem = { + name: '', + description: '', + price: 0, + unit_id: '', + unit: null, + taxes: [], + } + }, + fetchItems(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/items`, { params }) + .then((response) => { + this.items = response.data.data + this.totalItems = response.data.meta.item_total_count + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchItem(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/items/${id}`) + .then((response) => { + if (response.data) { + Object.assign(this.currentItem, response.data.data) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addItem(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/items', data) + .then((response) => { + const notificationStore = useNotificationStore() + + this.items.push(response.data.data) + + notificationStore.showNotification({ + type: 'success', + message: global.t('items.created_message'), + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateItem(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/items/${data.id}`, data) + .then((response) => { + if (response.data) { + const notificationStore = useNotificationStore() + + let pos = this.items.findIndex( + (item) => item.id === response.data.data.id + ) + + this.items[pos] = data.item + + notificationStore.showNotification({ + type: 'success', + message: global.t('items.updated_message'), + }) + } + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteItem(id) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/items/delete`, id) + .then((response) => { + let index = this.items.findIndex((item) => item.id === id) + this.items.splice(index, 1) + + notificationStore.showNotification({ + type: 'success', + message: global.tc('items.deleted_message', 1), + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteMultipleItems() { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/items/delete`, { ids: this.selectedItems }) + .then((response) => { + this.selectedItems.forEach((item) => { + let index = this.items.findIndex( + (_item) => _item.id === item.id + ) + this.items.splice(index, 1) + }) + + notificationStore.showNotification({ + type: 'success', + message: global.tc('items.deleted_message', 2), + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + selectItem(data) { + this.selectedItems = data + if (this.selectedItems.length === this.items.length) { + this.selectAllField = true + } else { + this.selectAllField = false + } + }, + + selectAllItems(data) { + if (this.selectedItems.length === this.items.length) { + this.selectedItems = [] + this.selectAllField = false + } else { + let allItemIds = this.items.map((item) => item.id) + this.selectedItems = allItemIds + this.selectAllField = true + } + }, + + addItemUnit(data) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/units`, data) + .then((response) => { + this.itemUnits.push(response.data.data) + + if (response.data.data) { + notificationStore.showNotification({ + type: 'success', + message: global.t( + 'settings.customization.items.item_unit_added' + ), + }) + } + + if (response.data.errors) { + notificationStore.showNotification({ + type: 'error', + message: err.response.data.errors[0], + }) + } + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateItemUnit(data) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/units/${data.id}`, data) + .then((response) => { + let pos = this.itemUnits.findIndex( + (unit) => unit.id === response.data.data.id + ) + + this.itemUnits[pos] = data + + if (response.data.data) { + notificationStore.showNotification({ + type: 'success', + message: global.t( + 'settings.customization.items.item_unit_updated' + ), + }) + } + + if (response.data.errors) { + notificationStore.showNotification({ + type: 'error', + message: err.response.data.errors[0], + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchItemUnits(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/units`, { params }) + .then((response) => { + this.itemUnits = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchItemUnit(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/units/${id}`) + .then((response) => { + this.currentItemUnit = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteItemUnit(id) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .delete(`/api/v1/units/${id}`) + .then((response) => { + if (!response.data.error) { + let index = this.itemUnits.findIndex((unit) => unit.id === id) + this.itemUnits.splice(index, 1) + } + + if (response.data.success) { + notificationStore.showNotification({ + type: 'success', + message: global.t( + 'settings.customization.items.deleted_message' + ), + }) + } + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/mail-driver.js b/resources/scripts/stores/mail-driver.js new file mode 100644 index 000000000..4b4fca263 --- /dev/null +++ b/resources/scripts/stores/mail-driver.js @@ -0,0 +1,146 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useMailDriverStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'mail-driver', + + state: () => ({ + mailConfigData: null, + mail_driver: 'smtp', + mail_drivers: [], + + basicMailConfig: { + mail_driver: '', + mail_host: '', + from_mail: '', + from_name: '', + }, + + mailgunConfig: { + mail_driver: '', + mail_mailgun_domain: '', + mail_mailgun_secret: '', + mail_mailgun_endpoint: '', + from_mail: '', + from_name: '', + }, + + sesConfig: { + mail_driver: '', + mail_host: '', + mail_port: null, + mail_ses_key: '', + mail_ses_secret: '', + mail_encryption: 'tls', + from_mail: '', + from_name: '', + }, + + smtpConfig: { + mail_driver: '', + mail_host: '', + mail_port: null, + mail_username: '', + mail_password: '', + mail_encryption: 'tls', + from_mail: '', + from_name: '', + }, + }), + + actions: { + fetchMailDrivers() { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/mail/drivers') + .then((response) => { + if (response.data) { + this.mail_drivers = response.data + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchMailConfig() { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/mail/config') + .then((response) => { + if (response.data) { + this.mailConfigData = response.data + this.mail_driver = response.data.mail_driver + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateMailConfig(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/mail/config', data) + .then((response) => { + const notificationStore = useNotificationStore() + if (response.data.success) { + notificationStore.showNotification({ + type: 'success', + message: global.t('wizard.success.' + response.data.success), + }) + } else { + notificationStore.showNotification({ + type: 'error', + message: global.t('wizard.errors.' + response.data.error), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + sendTestMail(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/mail/test', data) + .then((response) => { + const notificationStore = useNotificationStore() + if (response.data.success) { + notificationStore.showNotification({ + type: 'success', + message: global.t('general.send_mail_successfully'), + }) + } else { + notificationStore.showNotification({ + type: 'error', + message: global.t('validation.something_went_wrong'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/modal.js b/resources/scripts/stores/modal.js new file mode 100644 index 000000000..9ddc550aa --- /dev/null +++ b/resources/scripts/stores/modal.js @@ -0,0 +1,74 @@ +import { defineStore } from 'pinia' + +export const useModalStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'modal', + + state: () => ({ + active: false, + content: '', + title: '', + componentName: '', + id: '', + size: 'md', + data: null, + refreshData: null, + variant: '', + }), + + getters: { + isEdit() { + return (this.id ? true : false) + } + }, + + actions: { + openModal(payload) { + this.componentName = payload.componentName + this.active = true + + if (payload.id) { + this.id = payload.id + } + + this.title = payload.title + + if (payload.data) { + this.data = payload.data + } + + if (payload.refreshData) { + this.refreshData = payload.refreshData + } + + if (payload.variant) { + this.variant = payload.variant + } + + if (payload.size) { + this.size = payload.size + } + }, + + resetModalData() { + this.content = '' + this.title = '' + this.componentName = '' + this.id = '' + this.data = null + this.refreshData = null + }, + + closeModal() { + this.active = false + + setTimeout(() => { + this.resetModalData() + }, 300) + } + } + })() +} diff --git a/resources/scripts/stores/note.js b/resources/scripts/stores/note.js new file mode 100644 index 000000000..f05f25706 --- /dev/null +++ b/resources/scripts/stores/note.js @@ -0,0 +1,117 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useNotesStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'notes', + + state: () => ({ + notes: [], + currentNote: { + id: null, + type: '', + name: '', + notes: '', + }, + }), + + getters: { + isEdit: (state) => (state.currentNote.id ? true : false), + }, + + actions: { + resetCurrentNote() { + this.currentNote = { + type: '', + name: '', + notes: '', + } + }, + + fetchNotes(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/notes`, { params }) + .then((response) => { + this.notes = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchNote(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/notes/${id}`) + .then((response) => { + this.currentNote = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addNote(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/notes', data) + .then((response) => { + this.notes.push(response.data) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateNote(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/notes/${data.id}`, data) + .then((response) => { + if (response.data) { + let pos = this.notes.findIndex( + (notes) => notes.id === response.data.data.id + ) + this.notes[pos] = data.notes + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteNote(id) { + return new Promise((resolve, reject) => { + axios + .delete(`/api/v1/notes/${id}`) + .then((response) => { + let index = this.notes.findIndex((note) => note.id === id) + this.notes.splice(index, 1) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/notification.js b/resources/scripts/stores/notification.js new file mode 100644 index 000000000..a8d91bf94 --- /dev/null +++ b/resources/scripts/stores/notification.js @@ -0,0 +1,30 @@ +import { defineStore } from 'pinia' + +export const useNotificationStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + + return defineStoreFunc({ + id: 'notification', + + state: () => ({ + active: false, + autoHide: true, + notifications: [], + }), + + actions: { + showNotification(notification) { + this.notifications.push({ + ...notification, + id: (Math.random().toString(36) + Date.now().toString(36)).substr(2), + }) + }, + + hideNotification(data) { + this.notifications = this.notifications.filter((notification) => { + return notification.id != data.id + }) + } + } + })() +} diff --git a/resources/scripts/stores/payment.js b/resources/scripts/stores/payment.js new file mode 100644 index 000000000..8b1ef9ba4 --- /dev/null +++ b/resources/scripts/stores/payment.js @@ -0,0 +1,410 @@ +import axios from 'axios' +import moment from 'moment' +import { defineStore } from 'pinia' +import { useRoute } from 'vue-router' +import { useCompanyStore } from './company' +import { useNotificationStore } from './notification' +import paymentStub from '../stub/payment' +import { handleError } from '@/scripts/helpers/error-handling' + +export const usePaymentStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'payment', + + state: () => ({ + payments: [], + paymentTotalCount: 0, + + selectAllField: false, + selectedPayments: [], + selectedNote: null, + showExchangeRate: false, + + currentPayment: { + ...paymentStub, + }, + + paymentModes: [], + currentPaymentMode: { + id: '', + name: null, + }, + + isFetchingInitialData: false, + }), + + actions: { + fetchPaymentInitialData(isEdit) { + const companyStore = useCompanyStore() + const route = useRoute() + + this.isFetchingInitialData = true + + let actions = [] + if (isEdit) { + actions = [this.fetchPayment(route.params.id)] + } + Promise.all([ + this.fetchPaymentModes({ limit: 'all' }), + this.getNextNumber(), + ...actions, + ]) + .then(async ([res1, res2, res3]) => { + if (isEdit) { + if (res3.data.data.invoice) { + this.currentPayment.maxPayableAmount = parseInt( + res3.data.data.invoice.due_amount + ) + } + } + + // On Create + else if (!isEdit && res2.data) { + this.currentPayment.payment_date = moment().format('YYYY-MM-DD') + this.currentPayment.payment_number = res2.data.nextNumber + this.currentPayment.currency = + companyStore.selectedCompanyCurrency + } + + this.isFetchingInitialData = false + }) + .catch((err) => { + handleError(err) + }) + }, + + fetchPayments(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/payments`, { params }) + .then((response) => { + this.payments = response.data.data + this.paymentTotalCount = response.data.meta.payment_total_count + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchPayment(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/payments/${id}`) + .then((response) => { + Object.assign(this.currentPayment, response.data.data) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + addPayment(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/payments', data) + .then((response) => { + this.payments.push(response.data) + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('payments.created_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updatePayment(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/payments/${data.id}`, data) + .then((response) => { + if (response.data) { + let pos = this.payments.findIndex( + (payment) => payment.id === response.data.data.id + ) + + this.payments[pos] = data.payment + + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('payments.updated_message'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deletePayment(id) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/payments/delete`, id) + .then((response) => { + let index = this.payments.findIndex( + (payment) => payment.id === id + ) + this.payments.splice(index, 1) + + notificationStore.showNotification({ + type: 'success', + message: global.t('payments.deleted_message', 1), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteMultiplePayments() { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/payments/delete`, { ids: this.selectedPayments }) + .then((response) => { + this.selectedPayments.forEach((payment) => { + let index = this.payments.findIndex( + (_payment) => _payment.id === payment.id + ) + this.payments.splice(index, 1) + }) + notificationStore.showNotification({ + type: 'success', + message: global.tc('payments.deleted_message', 2), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + setSelectAllState(data) { + this.selectAllField = data + }, + + selectPayment(data) { + this.selectedPayments = data + if (this.selectedPayments.length === this.payments.length) { + this.selectAllField = true + } else { + this.selectAllField = false + } + }, + + selectAllPayments() { + if (this.selectedPayments.length === this.payments.length) { + this.selectedPayments = [] + this.selectAllField = false + } else { + let allPaymentIds = this.payments.map((payment) => payment.id) + this.selectedPayments = allPaymentIds + this.selectAllField = true + } + }, + + selectNote(data) { + this.selectedNote = null + this.selectedNote = data + }, + + resetSelectedNote(data) { + this.selectedNote = null + }, + + searchPayment(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/payments`, { params }) + .then((response) => { + this.payments = response.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + previewPayment(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/payments/${params.id}/send/preview`, { params }) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + sendEmail(data) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/payments/${data.id}/send`, data) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + getNextNumber(params, setState = false) { + return new Promise((resolve, reject) => { + window.axios + .get(`/api/v1/next-number?key=payment`, { params }) + .then((response) => { + if (setState) { + this.currentPayment.payment_number = response.data.nextNumber + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + resetCurrentPayment() { + this.currentPayment = { + ...paymentStub, + } + }, + + fetchPaymentModes(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/payment-methods`, { params }) + .then((response) => { + this.paymentModes = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchPaymentMode(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/payment-methods/${id}`) + .then((response) => { + this.currentPaymentMode = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addPaymentMode(data) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/payment-methods`, data) + .then((response) => { + this.paymentModes.push(response.data.data) + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.payment_modes.payment_mode_added'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updatePaymentMode(data) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/payment-methods/${data.id}`, data) + .then((response) => { + if (response.data) { + let pos = this.paymentModes.findIndex( + (paymentMode) => paymentMode.id === response.data.data.id + ) + this.paymentModes[pos] = data.paymentModes + notificationStore.showNotification({ + type: 'success', + message: global.t( + 'settings.payment_modes.payment_mode_updated' + ), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deletePaymentMode(id) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .delete(`/api/v1/payment-methods/${id}`) + .then((response) => { + let index = this.paymentModes.findIndex( + (paymentMode) => paymentMode.id === id + ) + this.paymentModes.splice(index, 1) + if (response.data.success) { + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.payment_modes.deleted_message'), + }) + } + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/recurring-invoice.js b/resources/scripts/stores/recurring-invoice.js new file mode 100644 index 000000000..448e90d2c --- /dev/null +++ b/resources/scripts/stores/recurring-invoice.js @@ -0,0 +1,436 @@ +import { defineStore } from 'pinia' +import recurringInvoiceStub from '@/scripts/stub/recurring-invoice' +import recurringInvoiceItemStub from '@/scripts/stub/recurring-invoice-item' +import TaxStub from '../stub/tax' +import { useRoute } from 'vue-router' +import { useCompanyStore } from './company' +import { useItemStore } from './item' +import { useTaxTypeStore } from './tax-type' +import { useCustomerStore } from './customer' +import Guid from 'guid' +import { handleError } from '@/scripts/helpers/error-handling' +import moment from 'moment' +import _ from 'lodash' +import { useInvoiceStore } from './invoice' +import { useNotificationStore } from './notification' + +export const useRecurringInvoiceStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'recurring-invoice', + + state: () => ({ + templates: [], + recurringInvoices: [], + selectedRecurringInvoices: [], + totalRecurringInvoices: 0, + isFetchingInitialSettings: false, + isFetchingViewData: false, + showExchangeRate: false, + selectAllField: false, + newRecurringInvoice: { + ...recurringInvoiceStub(), + }, + + frequencies: [ + { label: 'Every Minute', value: '* * * * *' }, + { label: 'Every 30 Minute', value: '*/30 * * * *' }, + { label: 'Every Hour', value: '0 * * * *' }, + { label: 'Every 2 Hour', value: '0 */2 * * *' }, + { label: 'Twice A Day', value: '0 13-15 * * *' }, + { label: 'Every Week', value: '0 0 * * 0' }, + { label: 'Every 15 Days', value: '0 5 */15 * *' }, + { label: 'First Day Of Month', value: '0 0 1 * *' }, + { label: 'Every 6 Month', value: '0 0 1 */6 *' }, + { label: 'Every Year', value: '0 0 1 1 *' }, + { label: 'Custom', value: 'CUSTOM' }, + ], + }), + + getters: { + getSubTotal() { + return ( + this.newRecurringInvoice?.items.reduce(function (a, b) { + return a + b['total'] + }, 0) || 0 + ) + }, + + getTotalSimpleTax() { + return _.sumBy(this.newRecurringInvoice.taxes, function (tax) { + if (!tax.compound_tax) { + return tax.amount + } + return 0 + }) + }, + + getTotalCompoundTax() { + return _.sumBy(this.newRecurringInvoice.taxes, function (tax) { + if (tax.compound_tax) { + return tax.amount + } + return 0 + }) + }, + + getTotalTax() { + if ( + this.newRecurringInvoice.tax_per_item === 'NO' || + this.newRecurringInvoice.tax_per_item === null + ) { + return this.getTotalSimpleTax + this.getTotalCompoundTax + } + return _.sumBy(this.newRecurringInvoice.items, function (tax) { + return tax.tax + }) + }, + + getSubtotalWithDiscount() { + return this.getSubTotal - this.newRecurringInvoice.discount_val + }, + + getTotal() { + return this.getSubtotalWithDiscount + this.getTotalTax + }, + }, + + actions: { + resetCurrentRecurringInvoice() { + this.newRecurringInvoice = { + ...recurringInvoiceStub(), + } + }, + + deselectItem(index) { + this.newRecurringInvoice.items[index] = { + ...recurringInvoiceItemStub, + id: Guid.raw(), + taxes: [{ ...TaxStub, id: Guid.raw() }], + } + }, + + addRecurringInvoice(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/recurring-invoices', data) + .then((response) => { + this.recurringInvoices = [ + ...this.recurringInvoices, + response.data.recurringInvoice, + ] + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: global.t('recurring_invoices.created_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchRecurringInvoice(id) { + return new Promise((resolve, reject) => { + this.isFetchingViewData = true + axios + .get(`/api/v1/recurring-invoices/${id}`) + .then((response) => { + Object.assign(this.newRecurringInvoice, response.data.data) + this.newRecurringInvoice.invoices = + response.data.data.invoices || [] + this.setSelectedFrequency() + this.isFetchingViewData = false + resolve(response) + }) + .catch((err) => { + this.isFetchingViewData = false + handleError(err) + reject(err) + }) + }) + }, + + updateRecurringInvoice(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/recurring-invoices/${data.id}`, data) + .then((response) => { + resolve(response) + + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: global.t('recurring_invoices.updated_message'), + }) + + let pos = this.recurringInvoices.findIndex( + (invoice) => invoice.id === response.data.data.id + ) + + this.recurringInvoices[pos] = response.data.data + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + selectCustomer(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/customers/${id}`) + .then((response) => { + this.newRecurringInvoice.customer = response.data.data + this.newRecurringInvoice.customer_id = response.data.data.id + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + searchRecurringInvoice(data) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/recurring-invoices?${data}`) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchRecurringInvoices(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/recurring-invoices`, { params }) + .then((response) => { + this.recurringInvoices = response.data.data + this.totalRecurringInvoices = + response.data.meta.recurring_invoice_total_count + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteRecurringInvoice(id) { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/recurring-invoices/delete`, id) + .then((response) => { + let index = this.recurringInvoices.findIndex( + (invoice) => invoice.id === id + ) + this.recurringInvoices.splice(index, 1) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteMultipleRecurringInvoices(id) { + return new Promise((resolve, reject) => { + let ids = this.selectedRecurringInvoices + if (id) { + ids = [id] + } + axios + .post(`/api/v1/recurring-invoices/delete`, { + ids: ids, + }) + .then((response) => { + this.selectedRecurringInvoices.forEach((invoice) => { + let index = this.recurringInvoices.findIndex( + (_inv) => _inv.id === invoice.id + ) + this.recurringInvoices.splice(index, 1) + }) + this.selectedRecurringInvoices = [] + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + resetSelectedCustomer() { + this.newRecurringInvoice.customer = null + this.newRecurringInvoice.customer_id = '' + }, + + selectRecurringInvoice(data) { + this.selectedRecurringInvoices = data + if ( + this.selectedRecurringInvoices.length === + this.recurringInvoices.length + ) { + this.selectAllField = true + } else { + this.selectAllField = false + } + }, + + selectAllRecurringInvoices() { + if ( + this.selectedRecurringInvoices.length === + this.recurringInvoices.length + ) { + this.selectedRecurringInvoices = [] + this.selectAllField = false + } else { + let allInvoiceIds = this.recurringInvoices.map( + (invoice) => invoice.id + ) + this.selectedRecurringInvoices = allInvoiceIds + this.selectAllField = true + } + }, + + addItem() { + this.newRecurringInvoice.items.push({ + ...recurringInvoiceItemStub, + id: Guid.raw(), + taxes: [{ ...TaxStub, id: Guid.raw() }], + }) + }, + + removeItem(index) { + this.newRecurringInvoice.items.splice(index, 1) + }, + + updateItem(data) { + Object.assign(this.newRecurringInvoice.items[data.index], { ...data }) + }, + + async fetchRecurringInvoiceInitialSettings(isEdit) { + const companyStore = useCompanyStore() + const customerStore = useCustomerStore() + const itemStore = useItemStore() + const invoiceStore = useInvoiceStore() + const taxTypeStore = useTaxTypeStore() + const route = useRoute() + + this.isFetchingInitialSettings = true + this.newRecurringInvoice.currency = companyStore.selectedCompanyCurrency + + if (route.query.customer) { + let response = await customerStore.fetchCustomer(route.query.customer) + this.newRecurringInvoice.customer = response.data.data + this.selectCustomer(response.data.data.id) + } + + let editActions = [] + + // on create + if (!isEdit) { + this.newRecurringInvoice.tax_per_item = + companyStore.selectedCompanySettings.tax_per_item + this.newRecurringInvoice.discount_per_item = + companyStore.selectedCompanySettings.discount_per_item + this.newRecurringInvoice.starts_at = moment().format('YYYY-MM-DD') + this.newRecurringInvoice.next_invoice_date = moment() + .add(7, 'days') + .format('YYYY-MM-DD') + } else { + editActions = [this.fetchRecurringInvoice(route.params.id)] + } + + Promise.all([ + itemStore.fetchItems({ + filter: {}, + orderByField: '', + orderBy: '', + }), + this.resetSelectedNote(), + invoiceStore.fetchInvoiceTemplates(), + taxTypeStore.fetchTaxTypes({ limit: 'all' }), + ...editActions, + ]) + .then(async ([res1, res2, res3, res4, res5]) => { + if (res3.data) { + this.templates = invoiceStore.templates + } + + if (!isEdit) { + this.setTemplate(this.templates[0].name) + } + + if (isEdit && res5?.data) { + let data = { + ...res5.data.data, + } + + this.setTemplate(res5?.data?.data?.template_name) + } + + this.isFetchingInitialSettings = false + }) + .catch((err) => { + handleError(err) + }) + }, + + setTemplate(data) { + this.newRecurringInvoice.template_name = data + }, + + setSelectedFrequency() { + this.newRecurringInvoice.selectedFrequency = this.frequencies.find( + (frequency) => { + return frequency.value === this.newRecurringInvoice.frequency + } + ) + }, + + resetSelectedNote() { + this.newRecurringInvoice.selectedNote = null + }, + + fetchRecurringInvoiceFrequencyDate(params) { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/recurring-invoice-frequency', { params }) + .then((response) => { + this.newRecurringInvoice.next_invoice_at = + response.data.next_invoice_at + + resolve(response) + }) + .catch((err) => { + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'error', + message: global.t('errors.enter_valid_cron_format'), + }) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/reset.js b/resources/scripts/stores/reset.js new file mode 100644 index 000000000..89608a502 --- /dev/null +++ b/resources/scripts/stores/reset.js @@ -0,0 +1,91 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useBackupStore } from './backup' +import { useCategoryStore } from './category' +import { useCompanyStore } from './company' +import { useCustomFieldStore } from './custom-field' +import { useCustomerStore } from './customer' +import { useDashboardStore } from './dashboard' +import { useDialogStore } from './dialog' +import { useDiskStore } from './disk' +import { useEstimateStore } from './estimate' +import { useExchangeRateStore } from './exchange-rate' +import { useExpenseStore } from './expense' +import { useGlobalStore } from './global' +import { useInstallationStore } from './installation' +import { useInvoiceStore } from './invoice' +import { useItemStore } from './item' +import { useMailDriverStore } from './mail-driver' +import { useModalStore } from './modal' +import { useNotesStore } from './note' +import { useNotificationStore } from './notification' +import { usePaymentStore } from './payment' +import { useRecurringInvoiceStore } from './recurring-invoice' +import { useRoleStore } from './role' +import { useTaxTypeStore } from './tax-type' +import { useUserStore } from './user' +import { useUsersStore } from './users' + +export const useResetStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'reset', + actions: { + clearPinia() { + const backupStore = useBackupStore() + const categoryStore = useCategoryStore() + const companyStore = useCompanyStore() + const customFieldStore = useCustomFieldStore() + const customerStore = useCustomerStore() + const dashboardStore = useDashboardStore() + const dialogStore = useDialogStore() + const diskStore = useDiskStore() + const estimateStore = useEstimateStore() + const exchangeRateStore = useExchangeRateStore() + const expenseStore = useExpenseStore() + const globalStore = useGlobalStore() + const installationStore = useInstallationStore() + const invoiceStore = useInvoiceStore() + const itemStore = useItemStore() + const mailDriverStore = useMailDriverStore() + const modalStore = useModalStore() + const noteStore = useNotesStore() + const notificationStore = useNotificationStore() + const paymentStore = usePaymentStore() + const recurringInvoiceStore = useRecurringInvoiceStore() + const roleStore = useRoleStore() + const taxTypeStore = useTaxTypeStore() + const userStore = useUserStore() + const usersStore = useUsersStore() + + backupStore.$reset() + categoryStore.$reset() + companyStore.$reset() + customFieldStore.$reset() + customerStore.$reset() + dashboardStore.$reset() + dialogStore.$reset() + diskStore.$reset() + estimateStore.$reset() + exchangeRateStore.$reset() + expenseStore.$reset() + globalStore.$reset() + installationStore.$reset() + invoiceStore.$reset() + itemStore.$reset() + mailDriverStore.$reset() + modalStore.$reset() + noteStore.$reset() + notificationStore.$reset() + paymentStore.$reset() + recurringInvoiceStore.$reset() + roleStore.$reset() + taxTypeStore.$reset() + userStore.$reset() + usersStore.$reset() + }, + }, + })() +} diff --git a/resources/scripts/stores/role.js b/resources/scripts/stores/role.js new file mode 100644 index 000000000..d1d024762 --- /dev/null +++ b/resources/scripts/stores/role.js @@ -0,0 +1,169 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import _ from 'lodash' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useRoleStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'role', + state: () => ({ + roles: [], + allAbilities: [], + selectedRoles: [], + currentRole: { + id: null, + name: '', + abilities: [], + }, + }), + + getters: { + isEdit: (state) => (state.currentRole.id ? true : false), + abilitiesList: (state) => { + let abilities = state.allAbilities.map((a) => ({ + modelName: a.model + ? a.model.substring(a.model.lastIndexOf('\\') + 1) + : 'Common', + disabled: false, + ...a, + })) + return _.groupBy(abilities, 'modelName') + }, + }, + + actions: { + fetchRoles(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/roles`, { params }) + .then((response) => { + this.roles = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchRole(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/roles/${id}`) + .then((response) => { + this.currentRole.name = response.data.data.name + this.currentRole.id = response.data.data.id + + response.data.data.abilities.forEach((_ra) => { + for (const property in this.abilitiesList) { + this.abilitiesList[property].forEach((_p) => { + if (_p.ability === _ra.name) { + this.currentRole.abilities.push(_p) + } + }) + } + }) + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addRole(data) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .post('/api/v1/roles', data) + .then((response) => { + this.roles.push(response.data.role) + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.roles.created_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateRole(data) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/roles/${data.id}`, data) + .then((response) => { + if (response.data) { + let pos = this.roles.findIndex( + (role) => role.id === response.data.data.id + ) + this.roles[pos] = data.role + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.roles.updated_message'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchAbilities(params) { + return new Promise((resolve, reject) => { + if (this.allAbilities.length) { + resolve(this.allAbilities) + } else { + axios + .get(`/api/v1/abilities`, { params }) + .then((response) => { + this.allAbilities = response.data.abilities + + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + } + }) + }, + + deleteRole(id) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .delete(`/api/v1/roles/${id}`) + .then((response) => { + let index = this.roles.findIndex((role) => role.id === id) + this.roles.splice(index, 1) + + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.roles.deleted_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/tax-type.js b/resources/scripts/stores/tax-type.js new file mode 100644 index 000000000..d20af94f7 --- /dev/null +++ b/resources/scripts/stores/tax-type.js @@ -0,0 +1,142 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useTaxTypeStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'taxType', + + state: () => ({ + taxTypes: [], + currentTaxType: { + id: null, + name: '', + percent: 0, + description: '', + compound_tax: false, + collective_tax: 0, + }, + }), + + getters: { + isEdit: (state) => (state.currentTaxType.id ? true : false), + }, + + actions: { + resetCurrentTaxType() { + this.currentTaxType = { + id: null, + name: '', + percent: 0, + description: '', + compound_tax: false, + collective_tax: 0, + } + }, + + fetchTaxTypes(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/tax-types`, { params }) + .then((response) => { + this.taxTypes = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchTaxType(id) { + return new Promise((resolve, reject) => { + window.axios + .get(`/api/v1/tax-types/${id}`) + .then((response) => { + this.currentTaxType = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addTaxType(data) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .post('/api/v1/tax-types', data) + .then((response) => { + this.taxTypes.push(response.data.data) + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.tax_types.created_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateTaxType(data) { + const notificationStore = useNotificationStore() + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/tax-types/${data.id}`, data) + .then((response) => { + if (response.data) { + let pos = this.taxTypes.findIndex( + (taxTypes) => taxTypes.id === response.data.data.id + ) + this.taxTypes[pos] = data.taxTypes + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.tax_types.updated_message'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteTaxType(id) { + return new Promise((resolve, reject) => { + window.axios + .delete(`/api/v1/tax-types/${id}`) + .then((response) => { + if (response.data.success) { + let index = this.taxTypes.findIndex( + (taxType) => taxType.id === id + ) + this.taxTypes.splice(index, 1) + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.tax_types.deleted_message'), + }) + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + }, + })() +} diff --git a/resources/scripts/stores/user.js b/resources/scripts/stores/user.js new file mode 100644 index 000000000..6ce748e58 --- /dev/null +++ b/resources/scripts/stores/user.js @@ -0,0 +1,147 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import { handleError } from '@/scripts/helpers/error-handling' + +export const useUserStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'user', + + state: () => ({ + currentUser: null, + currentAbilities: [], + currentUserSettings: {}, + + userForm: { + name: '', + email: '', + password: '', + confirm_password: '', + language: '', + }, + }), + + getters: { + currentAbilitiesCount: (state) => state.currentAbilities.length, + }, + + actions: { + updateCurrentUser(data) { + return new Promise((resolve, reject) => { + axios + .put('/api/v1/me', data) + .then((response) => { + this.currentUser = response.data.data + Object.assign(this.userForm, response.data.data) + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('settings.account_settings.updated_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchCurrentUser(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/me`, params) + .then((response) => { + this.currentUser = response.data.data + this.userForm = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + uploadAvatar(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/me/upload-avatar', data) + .then((response) => { + this.currentUser.avatar = response.data.data.avatar + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchUserSettings(settings) { + return new Promise((resolve, reject) => { + axios + .get('/api/v1/me/settings', { + params: { + settings, + }, + }) + .then((response) => { + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateUserSettings(data) { + return new Promise((resolve, reject) => { + axios + .put('/api/v1/me/settings', data) + .then((response) => { + if (data.settings.language) { + this.currentUserSettings.language = data.settings.language + global.locale = data.settings.language + } + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + hasAbilities(abilities) { + return !!this.currentAbilities.find((ab) => { + if (ab.name === '*') return true + if (typeof abilities === 'string') { + return ab.name === abilities + } + return !!abilities.find((p) => { + return ab.name === p + }) + }) + }, + + hasAllAbilities(abilities) { + let isAvailable = true + this.currentAbilities.filter((ab) => { + let hasContain = !!abilities.find((p) => { + return ab.name === p + }) + if (!hasContain) { + isAvailable = false + } + }) + + return isAvailable + }, + }, + })() +} diff --git a/resources/scripts/stores/users.js b/resources/scripts/stores/users.js new file mode 100644 index 000000000..e512966bc --- /dev/null +++ b/resources/scripts/stores/users.js @@ -0,0 +1,232 @@ +import axios from 'axios' +import { defineStore } from 'pinia' +import { useNotificationStore } from './notification' +import { handleError } from '../helpers/error-handling' + +export const useUsersStore = (useWindow = false) => { + const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore + const { global } = window.i18n + + return defineStoreFunc({ + id: 'users', + state: () => ({ + roles: [], + users: [], + totalUsers: 0, + currentUser: null, + selectAllField: false, + selectedUsers: [], + customerList: [], + userList: [], + + userData: { + name: '', + email: '', + password: null, + phone: null, + companies: [], + }, + }), + + actions: { + resetUserData() { + this.userData = { + name: '', + email: '', + password: null, + phone: null, + role: null, + companies: [], + } + }, + + fetchUsers(params) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/users`, { params }) + .then((response) => { + this.users = response.data.data + this.totalUsers = response.data.meta.total + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + fetchUser(id) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/users/${id}`) + .then((response) => { + this.userData = response.data.data + if (this.userData?.companies?.length) { + this.userData.companies.forEach((c, i) => { + this.userData.roles.forEach((r) => { + if (r.scope === c.id) + this.userData.companies[i].role = r.name + }) + }) + } + resolve(response) + }) + .catch((err) => { + console.log(err) + handleError(err) + reject(err) + }) + }) + }, + + fetchRoles(state) { + return new Promise((resolve, reject) => { + axios + .get(`/api/v1/roles`) + .then((response) => { + this.roles = response.data.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + addUser(data) { + return new Promise((resolve, reject) => { + axios + .post('/api/v1/users', data) + .then((response) => { + this.users.push(response.data) + const notificationStore = useNotificationStore() + + notificationStore.showNotification({ + type: 'success', + message: global.t('users.created_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + updateUser(data) { + return new Promise((resolve, reject) => { + axios + .put(`/api/v1/users/${data.id}`, data) + .then((response) => { + if (response) { + let pos = this.users.findIndex( + (user) => user.id === response.data.data.id + ) + this.users[pos] = response.data.data + } + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.t('users.updated_message'), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteUser(id) { + const notificationStore = useNotificationStore() + + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/users/delete`, { users: id.ids }) + .then((response) => { + let index = this.users.findIndex((user) => user.id === id) + this.users.splice(index, 1) + notificationStore.showNotification({ + type: 'success', + message: global.tc('users.deleted_message', 1), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + deleteMultipleUsers() { + return new Promise((resolve, reject) => { + axios + .post(`/api/v1/users/delete`, { users: this.selectedUsers }) + .then((response) => { + this.selectedUsers.forEach((user) => { + let index = this.users.findIndex( + (_user) => _user.id === user.id + ) + this.users.splice(index, 1) + }) + const notificationStore = useNotificationStore() + notificationStore.showNotification({ + type: 'success', + message: global.tc('users.deleted_message', 2), + }) + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + searchUsers(params) { + return new Promise((resolve, reject) => { + window.axios + .get(`/api/v1/search`, { params }) + .then((response) => { + this.userList = response.data.users.data + this.customerList = response.data.customers.data + resolve(response) + }) + .catch((err) => { + handleError(err) + reject(err) + }) + }) + }, + + setSelectAllState(data) { + this.selectAllField = data + }, + + selectUser(data) { + this.selectedUsers = data + if (this.selectedUsers.length === this.users.length) { + this.selectAllField = true + } else { + this.selectAllField = false + } + }, + + selectAllUsers() { + if (this.selectedUsers.length === this.users.length) { + this.selectedUsers = [] + this.selectAllField = false + } else { + let allUserIds = this.users.map((user) => user.id) + this.selectedUsers = allUserIds + this.selectAllField = true + } + }, + }, + })() +} diff --git a/resources/scripts/stub/abilities.js b/resources/scripts/stub/abilities.js new file mode 100644 index 000000000..024e9992e --- /dev/null +++ b/resources/scripts/stub/abilities.js @@ -0,0 +1,79 @@ +export default { + DASHBOARD: 'dashboard', + + // customers + CREATE_CUSTOMER: 'create-customer', + DELETE_CUSTOMER: 'delete-customer', + EDIT_CUSTOMER: 'edit-customer', + VIEW_CUSTOMER: 'view-customer', + + // Items + CREATE_ITEM: 'create-item', + DELETE_ITEM: 'delete-item', + EDIT_ITEM: 'edit-item', + VIEW_ITEM: 'view-item', + + // Tax Types + CREATE_TAX_TYPE: 'create-tax-type', + DELETE_TAX_TYPE: 'delete-tax-type', + EDIT_TAX_TYPE: 'edit-tax-type', + VIEW_TAX_TYPE: 'view-tax-type', + + // Estimates + CREATE_ESTIMATE: 'create-estimate', + DELETE_ESTIMATE: 'delete-estimate', + EDIT_ESTIMATE: 'edit-estimate', + VIEW_ESTIMATE: 'view-estimate', + SEND_ESTIMATE: 'send-estimate', + + // Invoices + CREATE_INVOICE: 'create-invoice', + DELETE_INVOICE: 'delete-invoice', + EDIT_INVOICE: 'edit-invoice', + VIEW_INVOICE: 'view-invoice', + SEND_INVOICE: 'send-invoice', + + // Recurring Invoices + CREATE_RECURRING_INVOICE: 'create-recurring-invoice', + DELETE_RECURRING_INVOICE: 'delete-recurring-invoice', + EDIT_RECURRING_INVOICE: 'edit-recurring-invoice', + VIEW_RECURRING_INVOICE: 'view-recurring-invoice', + + // Payment + CREATE_PAYMENT: 'create-payment', + DELETE_PAYMENT: 'delete-payment', + EDIT_PAYMENT: 'edit-payment', + VIEW_PAYMENT: 'view-payment', + SEND_PAYMENT: 'send-payment', + + // Payment + CREATE_EXPENSE: 'create-expense', + DELETE_EXPENSE: 'delete-expense', + EDIT_EXPENSE: 'edit-expense', + VIEW_EXPENSE: 'view-expense', + + // Custom fields + CREATE_CUSTOM_FIELDS: 'create-custom-field', + DELETE_CUSTOM_FIELDS: 'delete-custom-field', + EDIT_CUSTOM_FIELDS: 'edit-custom-field', + VIEW_CUSTOM_FIELDS: 'view-custom-field', + + // Roles + CREATE_ROLE: 'create-role', + DELETE_ROLE: 'delete-role', + EDIT_ROLE: 'edit-role', + VIEW_ROLE: 'view-role', + + // exchange rates + VIEW_EXCHANGE_RATE: 'view-exchange-rate-provider', + CREATE_EXCHANGE_RATE: 'create-exchange-rate-provider', + EDIT_EXCHANGE_RATE: 'edit-exchange-rate-provider', + DELETE_EXCHANGE_RATE: 'delete-exchange-rate-provider', + + // Reports + VIEW_FINANCIAL_REPORT: 'view-financial-reports', + + // settings + MANAGE_NOTE: 'manage-all-notes', + VIEW_NOTE: 'view-all-notes', +} diff --git a/resources/assets/js/stub/address.js b/resources/scripts/stub/address.js similarity index 100% rename from resources/assets/js/stub/address.js rename to resources/scripts/stub/address.js diff --git a/resources/scripts/stub/custom-field.js b/resources/scripts/stub/custom-field.js new file mode 100644 index 000000000..af04dac34 --- /dev/null +++ b/resources/scripts/stub/custom-field.js @@ -0,0 +1,12 @@ +export default { + id: null, + label: null, + type: null, + name: null, + default_answer: null, + is_required: false, + placeholder: null, + model_type: null, + order: 1, + options: [], +} diff --git a/resources/scripts/stub/customer.js b/resources/scripts/stub/customer.js new file mode 100644 index 000000000..2e28bffb3 --- /dev/null +++ b/resources/scripts/stub/customer.js @@ -0,0 +1,16 @@ +import addressStub from '@/scripts/stub/address.js' + +export default function () { + return { + name: '', + contact_name: '', + email: '', + phone: null, + currency_id: null, + website: null, + billing: { ...addressStub }, + shipping: { ...addressStub }, + customFields: [], + fields: [] + } +} diff --git a/resources/scripts/stub/estimate-item.js b/resources/scripts/stub/estimate-item.js new file mode 100644 index 000000000..3cd1a3b45 --- /dev/null +++ b/resources/scripts/stub/estimate-item.js @@ -0,0 +1,19 @@ +export default { + estimate_id: null, + item_id: null, + name: '', + title: '', + description: null, + quantity: 1, + price: 0, + discount_type: 'fixed', + discount_val: 0, + discount: 0, + total: 0, + sub_total: 0, + totalTax: 0, + totalSimpleTax: 0, + totalCompoundTax: 0, + tax: 0, + taxes: [], +} diff --git a/resources/scripts/stub/estimate.js b/resources/scripts/stub/estimate.js new file mode 100644 index 000000000..1592eb146 --- /dev/null +++ b/resources/scripts/stub/estimate.js @@ -0,0 +1,37 @@ +import Guid from 'guid' +import estimateItemStub from './estimate-item' +import taxStub from './tax' + +export default function () { + return { + id: null, + customer: null, + template_name: '', + tax_per_item: null, + discount_per_item: null, + estimate_date: '', + expiry_date: '', + estimate_number: '', + customer_id: null, + sub_total: 0, + total: 0, + tax: 0, + notes: '', + discount_type: 'fixed', + discount_val: 0, + reference_number: null, + discount: 0, + items: [ + { + ...estimateItemStub, + id: Guid.raw(), + taxes: [{ ...taxStub, id: Guid.raw() }], + }, + ], + taxes: [], + customFields: [], + fields: [], + selectedNote: null, + selectedCurrency: '', + } +} diff --git a/resources/scripts/stub/expense.js b/resources/scripts/stub/expense.js new file mode 100644 index 000000000..98e945a6c --- /dev/null +++ b/resources/scripts/stub/expense.js @@ -0,0 +1,17 @@ +import moment from 'moment' + +export default { + expense_category_id: null, + expense_date: moment().format('YYYY-MM-DD'), + amount: 100, + notes: '', + attachment_receipt: null, + customer_id: '', + currency_id: '', + payment_method_id: '', + receiptFiles: [], + customFields: [], + fields: [], + in_use: false, + selectedCurrency: null +} diff --git a/resources/assets/js/stub/invoice.js b/resources/scripts/stub/invoice-item.js similarity index 100% rename from resources/assets/js/stub/invoice.js rename to resources/scripts/stub/invoice-item.js diff --git a/resources/scripts/stub/invoice.js b/resources/scripts/stub/invoice.js new file mode 100644 index 000000000..f3c007b5d --- /dev/null +++ b/resources/scripts/stub/invoice.js @@ -0,0 +1,37 @@ +import Guid from 'guid' +import invoiceItemStub from './invoice-item' +import taxStub from './tax' + +export default function () { + return { + id: null, + invoice_number: '', + customer: null, + customer_id: null, + template_name: null, + invoice_date: '', + due_date: '', + notes: '', + discount: 0, + discount_type: 'fixed', + discount_val: 0, + reference_number: null, + tax: 0, + sub_total: 0, + total: 0, + tax_per_item: null, + discount_per_item: null, + taxes: [], + items: [ + { + ...invoiceItemStub, + id: Guid.raw(), + taxes: [{ ...taxStub, id: Guid.raw() }], + }, + ], + customFields: [], + fields: [], + selectedNote: null, + selectedCurrency: '', + } +} diff --git a/resources/scripts/stub/payment.js b/resources/scripts/stub/payment.js new file mode 100644 index 000000000..24a695098 --- /dev/null +++ b/resources/scripts/stub/payment.js @@ -0,0 +1,15 @@ +export default { + maxPayableAmount: Number.MAX_SAFE_INTEGER, + selectedCustomer: '', + currency: null, + currency_id: '', + customer_id: '', + payment_number: '', + payment_date: '', + amount: 100, + invoice_id: '', + notes: '', + payment_method_id: '', + customFields: [], + fields: [] +} diff --git a/resources/scripts/stub/recurring-invoice-item.js b/resources/scripts/stub/recurring-invoice-item.js new file mode 100644 index 000000000..95a1936bd --- /dev/null +++ b/resources/scripts/stub/recurring-invoice-item.js @@ -0,0 +1,18 @@ +export default { + recurring_invoice_id: null, + item_id: null, + name: '', + title: '', + description: null, + quantity: 1, + price: 0, + discount_type: 'fixed', + discount_val: 0, + discount: 0, + total: 0, + totalTax: 0, + totalSimpleTax: 0, + totalCompoundTax: 0, + tax: 0, + taxes: [], +} diff --git a/resources/scripts/stub/recurring-invoice.js b/resources/scripts/stub/recurring-invoice.js new file mode 100644 index 000000000..8fbe7f634 --- /dev/null +++ b/resources/scripts/stub/recurring-invoice.js @@ -0,0 +1,48 @@ +import Guid from 'guid' +import recurringInvoiceItemStub from './recurring-invoice-item' +import taxStub from './tax' + +export default function () { + return { + currency: null, + customer: null, + + customer_id: null, + invoice_template_id: 1, + sub_total: 0, + total: 0, + tax: 0, + notes: '', + discount_type: 'fixed', + discount_val: 0, + discount: 0, + starts_at: null, + send_automatically: true, + status: 'ACTIVE', + company_id: null, + next_invoice_at: null, + next_invoice_date: null, + frequency: '0 0 * * 0', + limit_count: null, + limit_by: 'NONE', + limit_date: null, + exchange_rate: null, + tax_per_item: null, + discount_per_item: null, + template_name: null, + items: [ + { + ...recurringInvoiceItemStub, + id: Guid.raw(), + taxes: [{ ...taxStub, id: Guid.raw() }], + }, + ], + taxes: [], + customFields: [], + fields: [], + invoices: [], + selectedNote: null, + selectedFrequency: { label: 'Every Week', value: '0 0 * * 0' }, + selectedInvoice: null, + } +} diff --git a/resources/assets/js/stub/tax.js b/resources/scripts/stub/tax.js similarity index 100% rename from resources/assets/js/stub/tax.js rename to resources/scripts/stub/tax.js diff --git a/resources/scripts/views/SampleTable.vue b/resources/scripts/views/SampleTable.vue new file mode 100644 index 000000000..3e3396035 --- /dev/null +++ b/resources/scripts/views/SampleTable.vue @@ -0,0 +1,175 @@ + + + diff --git a/resources/scripts/views/auth/ForgotPassword.vue b/resources/scripts/views/auth/ForgotPassword.vue new file mode 100644 index 000000000..d5bfeca39 --- /dev/null +++ b/resources/scripts/views/auth/ForgotPassword.vue @@ -0,0 +1,92 @@ + + + diff --git a/resources/scripts/views/auth/Login.vue b/resources/scripts/views/auth/Login.vue new file mode 100644 index 000000000..f2ce66b42 --- /dev/null +++ b/resources/scripts/views/auth/Login.vue @@ -0,0 +1,131 @@ + + + diff --git a/resources/scripts/views/auth/ResetPassword.vue b/resources/scripts/views/auth/ResetPassword.vue new file mode 100644 index 000000000..7f1c46869 --- /dev/null +++ b/resources/scripts/views/auth/ResetPassword.vue @@ -0,0 +1,165 @@ + + + diff --git a/resources/scripts/views/customers/Create.vue b/resources/scripts/views/customers/Create.vue new file mode 100644 index 000000000..55d93661c --- /dev/null +++ b/resources/scripts/views/customers/Create.vue @@ -0,0 +1,621 @@ + + + diff --git a/resources/scripts/views/customers/Index.vue b/resources/scripts/views/customers/Index.vue new file mode 100644 index 000000000..e441750cf --- /dev/null +++ b/resources/scripts/views/customers/Index.vue @@ -0,0 +1,363 @@ + + + diff --git a/resources/scripts/views/customers/View.vue b/resources/scripts/views/customers/View.vue new file mode 100644 index 000000000..e10c79865 --- /dev/null +++ b/resources/scripts/views/customers/View.vue @@ -0,0 +1,144 @@ + + + diff --git a/resources/scripts/views/customers/partials/CustomerChart.vue b/resources/scripts/views/customers/partials/CustomerChart.vue new file mode 100644 index 000000000..e8918dfdb --- /dev/null +++ b/resources/scripts/views/customers/partials/CustomerChart.vue @@ -0,0 +1,222 @@ + + + diff --git a/resources/scripts/views/customers/partials/CustomerChartPlaceholder.vue b/resources/scripts/views/customers/partials/CustomerChartPlaceholder.vue new file mode 100644 index 000000000..29c73166a --- /dev/null +++ b/resources/scripts/views/customers/partials/CustomerChartPlaceholder.vue @@ -0,0 +1,79 @@ + diff --git a/resources/scripts/views/customers/partials/CustomerInfo.vue b/resources/scripts/views/customers/partials/CustomerInfo.vue new file mode 100644 index 000000000..0d79303ca --- /dev/null +++ b/resources/scripts/views/customers/partials/CustomerInfo.vue @@ -0,0 +1,119 @@ + + + diff --git a/resources/scripts/views/customers/partials/CustomerViewSidebar.vue b/resources/scripts/views/customers/partials/CustomerViewSidebar.vue new file mode 100644 index 000000000..7f7983b77 --- /dev/null +++ b/resources/scripts/views/customers/partials/CustomerViewSidebar.vue @@ -0,0 +1,293 @@ + + + diff --git a/resources/scripts/views/dashboard/Dashboard.vue b/resources/scripts/views/dashboard/Dashboard.vue new file mode 100644 index 000000000..032c61ce1 --- /dev/null +++ b/resources/scripts/views/dashboard/Dashboard.vue @@ -0,0 +1,13 @@ + + + diff --git a/resources/scripts/views/dashboard/DashboardChart.vue b/resources/scripts/views/dashboard/DashboardChart.vue new file mode 100644 index 000000000..319473dce --- /dev/null +++ b/resources/scripts/views/dashboard/DashboardChart.vue @@ -0,0 +1,186 @@ + + + diff --git a/resources/scripts/views/dashboard/DashboardChartPlaceholder.vue b/resources/scripts/views/dashboard/DashboardChartPlaceholder.vue new file mode 100644 index 000000000..a537ecf18 --- /dev/null +++ b/resources/scripts/views/dashboard/DashboardChartPlaceholder.vue @@ -0,0 +1,88 @@ + diff --git a/resources/scripts/views/dashboard/DashboardStats.vue b/resources/scripts/views/dashboard/DashboardStats.vue new file mode 100644 index 000000000..6873268c2 --- /dev/null +++ b/resources/scripts/views/dashboard/DashboardStats.vue @@ -0,0 +1,79 @@ + + + diff --git a/resources/scripts/views/dashboard/DashboardStatsItem.vue b/resources/scripts/views/dashboard/DashboardStatsItem.vue new file mode 100644 index 000000000..5a79bde6d --- /dev/null +++ b/resources/scripts/views/dashboard/DashboardStatsItem.vue @@ -0,0 +1,64 @@ + + + + diff --git a/resources/scripts/views/dashboard/DashboardStatsPlaceholder.vue b/resources/scripts/views/dashboard/DashboardStatsPlaceholder.vue new file mode 100644 index 000000000..a114818da --- /dev/null +++ b/resources/scripts/views/dashboard/DashboardStatsPlaceholder.vue @@ -0,0 +1,20 @@ + diff --git a/resources/scripts/views/dashboard/DashboardStatsSmPlaceholder.vue b/resources/scripts/views/dashboard/DashboardStatsSmPlaceholder.vue new file mode 100644 index 000000000..90ad7a11a --- /dev/null +++ b/resources/scripts/views/dashboard/DashboardStatsSmPlaceholder.vue @@ -0,0 +1,31 @@ + diff --git a/resources/scripts/views/dashboard/DashboardTable.vue b/resources/scripts/views/dashboard/DashboardTable.vue new file mode 100644 index 000000000..a010131f6 --- /dev/null +++ b/resources/scripts/views/dashboard/DashboardTable.vue @@ -0,0 +1,181 @@ + + + diff --git a/resources/scripts/views/errors/404.vue b/resources/scripts/views/errors/404.vue new file mode 100644 index 000000000..b89d99ca7 --- /dev/null +++ b/resources/scripts/views/errors/404.vue @@ -0,0 +1,55 @@ + + + diff --git a/resources/scripts/views/estimates/Index.vue b/resources/scripts/views/estimates/Index.vue new file mode 100644 index 000000000..b61d7b90b --- /dev/null +++ b/resources/scripts/views/estimates/Index.vue @@ -0,0 +1,450 @@ + + + diff --git a/resources/scripts/views/estimates/View.vue b/resources/scripts/views/estimates/View.vue new file mode 100644 index 000000000..9b0da41a5 --- /dev/null +++ b/resources/scripts/views/estimates/View.vue @@ -0,0 +1,500 @@ +