7b3f6a6bf0e7ef065551fa39f35b3e29c72cd9a4
[freeside.git] / rt / etc / initialdata
1 # Initial data for a fresh RT3 Installation.
2
3 @Users = (
4     {  Name         => 'root',
5        Gecos        => 'root',
6        RealName     => 'Enoch Root',
7        Password     => 'password',
8        EmailAddress => "root\@localhost",
9        Comments     => 'SuperUser',
10        Privileged   => '1',
11     },
12 );
13
14 @Groups = (
15 );
16
17 @Queues = ({ Name              => 'General',
18              Description       => 'The default queue',
19              CorrespondAddress => "",
20              CommentAddress    => "", },
21            { Name        => '___Approvals',
22              Description => 'A system-internal queue for the approvals system',
23              Disabled    => 2, } );
24
25 @ScripActions = (
26
27     {  Name        => 'Autoreply To Requestors',    # loc
28        Description =>
29 'Always sends a message to the requestors independent of message sender' ,                                            # loc
30        ExecModule => 'Autoreply',
31        Argument   => 'Requestor' },
32     { Name        => 'Notify Requestors',                    # loc
33       Description => 'Sends a message to the requestors',    # loc
34       ExecModule  => 'Notify',
35       Argument    => 'Requestor' },
36     { Name        => 'Notify Owner as Comment',              # loc
37       Description => 'Sends mail to the owner',              # loc
38       ExecModule  => 'NotifyAsComment',
39       Argument    => 'Owner' },
40     { Name        => 'Notify Owner',                         # loc
41       Description => 'Sends mail to the owner',              # loc
42       ExecModule  => 'Notify',
43       Argument    => 'Owner' },
44     { Name        => 'Notify Ccs as Comment',              # loc
45       Description => 'Sends mail to the Ccs as a comment', # loc
46       ExecModule  => 'NotifyAsComment',
47       Argument    => 'Cc' },
48     { Name        => 'Notify Ccs',                                   # loc
49       Description => 'Sends mail to the Ccs',                        # loc
50       ExecModule  => 'Notify',
51       Argument    => 'Cc' },
52     { Name        => 'Notify AdminCcs as Comment',                        # loc
53       Description => 'Sends mail to the administrative Ccs as a comment', # loc
54       ExecModule  => 'NotifyAsComment',
55       Argument    => 'AdminCc' },
56     { Name        => 'Notify AdminCcs',                                   # loc
57       Description => 'Sends mail to the administrative Ccs',              # loc
58       ExecModule  => 'Notify',
59       Argument    => 'AdminCc' },
60
61     { Name        => 'Notify Requestors and Ccs as Comment',              # loc
62       Description => 'Send mail to requestors and Ccs as a comment',      # loc
63       ExecModule  => 'NotifyAsComment',
64       Argument    => 'Requestor,Cc' },
65
66     { Name        => 'Notify Requestors and Ccs',                         # loc
67       Description => 'Send mail to requestors and Ccs',                   # loc
68       ExecModule  => 'Notify',
69       Argument    => 'Requestor,Cc' },
70
71     { Name        => 'Notify Owner, Requestors, Ccs and AdminCcs as Comment',    # loc
72       Description => 'Send mail to owner and all watchers as a "comment"',          # loc
73       ExecModule  => 'NotifyAsComment',
74       Argument    => 'All' },
75     { Name        => 'Notify Owner, Requestors, Ccs and AdminCcs',               # loc
76       Description => 'Send mail to owner and all watchers',                         # loc
77       ExecModule  => 'Notify',
78       Argument    => 'All' },
79     { Name        => 'Notify Other Recipients as Comment',                # loc
80       Description => 'Sends mail to explicitly listed Ccs and Bccs',      # loc
81       ExecModule  => 'NotifyAsComment',
82       Argument    => 'OtherRecipients' },
83     { Name        => 'Notify Other Recipients',                           # loc
84       Description => 'Sends mail to explicitly listed Ccs and Bccs',      # loc
85       ExecModule  => 'Notify',
86       Argument    => 'OtherRecipients' },
87     { Name        => 'User Defined',                                      # loc
88       Description => 'Perform a user-defined action',                     # loc
89       ExecModule  => 'UserDefined', },
90     {  Name        => 'Create Tickets',                                    # loc
91        Description =>
92          'Create new tickets based on this scrip\'s template',             # loc
93        ExecModule => 'CreateTickets', },
94     { Name        => 'Open Tickets',                                      # loc
95       Description => 'Open tickets on correspondence',                    # loc
96       ExecModule  => 'AutoOpen' },
97     { Name        => 'Extract Subject Tag',                               # loc
98       Description => 'Extract tags from a Transaction\'s subject and add them to the Ticket\'s subject.', # loc
99       ExecModule  => 'ExtractSubjectTag' },
100
101     #freeside
102     { Name        => 'Set Priority',
103       Description => 'Set ticket priority',
104       ExecModule  => 'SetPriority',
105       Argument    => '',
106     },
107     { Name        => 'Cancel Scheduled Resolve',
108       Description => 'Set ticket not to resolve in the future',
109       ExecModule  => 'SetWillResolve',
110       Argument    => '',
111     },
112     { Name        => 'Scheduled Resolve',
113       Description => 'Resolve ticket if its WillResolve date has passed',
114       ExecModule  => 'ScheduledResolve',
115       Argument    => '',
116     },
117 );
118
119 @ScripConditions = (
120     { Name                 => 'On Create',                                # loc
121       Description          => 'When a ticket is created',                 # loc
122       ApplicableTransTypes => 'Create',
123       ExecModule           => 'AnyTransaction', },
124
125     { Name                 => 'On Transaction',                           # loc
126       Description          => 'When anything happens',                    # loc
127       ApplicableTransTypes => 'Any',
128       ExecModule           => 'AnyTransaction', },
129     {
130
131       Name                 => 'On Correspond',                             # loc
132       Description          => 'Whenever correspondence comes in',          # loc
133       ApplicableTransTypes => 'Correspond',
134       ExecModule           => 'AnyTransaction', },
135
136     {
137
138       Name                 => 'On Comment',                                # loc
139       Description          => 'Whenever comments come in',                 # loc
140       ApplicableTransTypes => 'Comment',
141       ExecModule           => 'AnyTransaction' },
142     {
143
144       Name                 => 'On Status Change',                          # loc
145       Description          => 'Whenever a ticket\'s status changes',       # loc
146       ApplicableTransTypes => 'Status',
147       ExecModule           => 'AnyTransaction',
148
149     },
150     {
151
152       Name                 => 'On Priority Change',                       # loc
153       Description          => 'Whenever a ticket\'s priority changes',    # loc
154       ApplicableTransTypes => 'Set',
155       ExecModule           => 'PriorityChange',
156     },
157     {
158
159       Name                 => 'On Owner Change',                           # loc
160       Description          => 'Whenever a ticket\'s owner changes',        # loc
161       ApplicableTransTypes => 'Any',
162       ExecModule           => 'OwnerChange',
163
164     },
165     {
166
167       Name                 => 'On Queue Change',                           # loc
168       Description          => 'Whenever a ticket\'s queue changes',        # loc
169       ApplicableTransTypes => 'Set',
170       ExecModule           => 'QueueChange',
171
172     },
173     {  Name                 => 'On Resolve',                               # loc
174        Description          => 'Whenever a ticket is resolved',            # loc
175        ApplicableTransTypes => 'Status',
176        ExecModule           => 'StatusChange',
177        Argument             => 'resolved'
178
179     },
180     {  Name                 => 'On Reject',                                # loc
181        Description          => 'Whenever a ticket is rejected',            # loc
182        ApplicableTransTypes => 'Status',
183        ExecModule           => 'StatusChange',
184        Argument             => 'rejected'
185
186     },
187     {  Name                 => 'User Defined',                             # loc
188        Description          => 'Whenever a user-defined condition occurs', # loc
189        ApplicableTransTypes => 'Any',
190        ExecModule           => 'UserDefined'
191
192     },
193
194     {  Name                 => 'On Close',                                 # loc
195        Description          => 'Whenever a ticket is closed', # loc
196        ApplicableTransTypes => 'Status,Set',
197        ExecModule           => 'CloseTicket',
198     },
199     {  Name                 => 'On Reopen',                                # loc
200        Description          => 'Whenever a ticket is reopened', # loc
201        ApplicableTransTypes => 'Status,Set',
202        ExecModule           => 'ReopenTicket',
203     },
204
205     #freeside
206     {  Name                 => 'On Custom Field Transaction',
207        Description          => 'When a custom field is changed',
208        ExecModule           => 'CustomFieldTransaction',
209        ApplicableTransTypes => 'Any',
210     },
211     {  Name                 => 'On Custom Field Change',
212        Description          => 'When a custom field is changed to some value',
213        ExecModule           => 'CustomFieldChange',
214        ApplicableTransTypes => 'Any',
215     },
216
217 );
218
219 @Templates = (
220     { Queue       => '0',
221       Name        => 'Blank',                                             # loc
222       Description => 'A blank template',                                  # loc
223       Content     => '', },
224     {  Queue       => '0',
225        Name        => 'Autoreply',                                         # loc
226        Description => 'Default Autoresponse template',                     # loc
227        Content     => 'Subject: AutoReply: {$Ticket->Subject}
228
229
230 Greetings,
231
232 This message has been automatically generated in response to the
233 creation of a trouble ticket regarding:
234         "{$Ticket->Subject()}", 
235 a summary of which appears below.
236
237 There is no need to reply to this message right now.  Your ticket has been
238 assigned an ID of [{$Ticket->QueueObj->SubjectTag || $rtname} #{$Ticket->id()}].
239
240 Please include the string:
241
242          [{$Ticket->QueueObj->SubjectTag || $rtname} #{$Ticket->id}]
243
244 in the subject line of all future correspondence about this issue. To do so, 
245 you may reply to this message.
246
247                         Thank you,
248                         {$Ticket->QueueObj->CorrespondAddress()}
249
250 -------------------------------------------------------------------------
251 {$Transaction->Content()}
252 '
253     },
254
255     {  Queue       => '0',
256        Name        => 'Transaction',                     # loc
257        Description => 'Default transaction template',    # loc
258        Content     => 'RT-Attach-Message: yes
259
260
261 {$Transaction->CreatedAsString}: Request {$Ticket->id} was acted upon.
262  Transaction: {$Transaction->Description}
263        Queue: {$Ticket->QueueObj->Name}
264      Subject: {$Transaction->Subject || $Ticket->Subject || "(No subject given)"}
265        Owner: {$Ticket->OwnerObj->Name}
266   Requestors: {$Ticket->RequestorAddresses}
267       Status: {$Ticket->Status}
268  Ticket <URL: {RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id} >
269
270
271 {$Transaction->Content()}
272 '
273     },
274
275     {
276
277       Queue       => '0',
278       Name        => 'Admin Correspondence',                     # loc
279       Description => 'Default admin correspondence template',    # loc
280       Content     => 'RT-Attach-Message: yes
281
282
283 <URL: {RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id} >
284
285 {$Transaction->Content()}
286 '
287     },
288
289     {  Queue       => '0',
290        Name        => 'Correspondence',                          # loc
291        Description => 'Default correspondence template',         # loc
292        Content     => 'RT-Attach-Message: yes
293
294 {$Transaction->Content()}
295 '
296     },
297
298     {  Queue       => '0',
299        Name        => 'Admin Comment',                           # loc
300        Description => 'Default admin comment template',          # loc
301        Content     =>
302 'Subject: [Comment] {my $s=($Transaction->Subject||$Ticket->Subject); $s =~ s/\\[Comment\\]\\s*//g; $s =~ s/^Re:\\s*//i; $s;}
303 RT-Attach-Message: yes
304
305
306 {RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id}
307 This is a comment.  It is not sent to the Requestor(s):
308
309 {$Transaction->Content()}
310 '
311     },
312
313     {  Queue       => '0',
314        Name        => 'Status Change',                                     # loc
315        Description => 'Ticket status changed',                             # loc
316        Content     => 'Subject: Status Changed to: {$Transaction->NewValue}
317
318
319 {RT->Config->Get(\'WebURL\')}Ticket/Display.html?id={$Ticket->id}
320
321 {$Transaction->Content()}
322 '
323     },
324
325     {
326
327       Queue       => '0',
328       Name        => 'Resolved',                 # loc
329       Description => 'Ticket Resolved',          # loc
330       Content     => 'Subject: Resolved: {$Ticket->Subject}
331
332 According to our records, your request has been resolved. If you have any
333 further questions or concerns, please respond to this message.
334 '
335     },
336     {  Queue       => '___Approvals',
337        Name        => "New Pending Approval",    # loc
338        Description =>
339          "Notify Owners and AdminCcs of new items pending their approval", # loc
340        Content => 'Subject: New Pending Approval: {$Ticket->Subject}
341
342 Greetings,
343
344 There is a new item pending your approval: "{$Ticket->Subject()}", 
345 a summary of which appears below.
346
347 Please visit {RT->Config->Get(\'WebURL\')}Approvals/Display.html?id={$Ticket->id}
348 to approve or reject this ticket, or {RT->Config->Get(\'WebURL\')}Approvals/ to
349 batch-process all your pending approvals.
350
351 -------------------------------------------------------------------------
352 {$Transaction->Content()}
353 '
354     },
355     {  Queue       => '___Approvals',
356        Name        => "Approval Passed",    # loc
357        Description =>
358          "Notify Requestor of their ticket has been approved by some approver", # loc
359        Content => 'Subject: Ticket Approved: {$Ticket->Subject}
360
361 Greetings,
362
363 Your ticket has been approved by { eval { $Approver->Name } }.
364 Other approvals may be pending.
365
366 Approver\'s notes: { $Notes }
367 '
368     },
369     {  Queue       => '___Approvals',
370        Name        => "All Approvals Passed",    # loc
371        Description =>
372          "Notify Requestor of their ticket has been approved by all approvers", # loc
373        Content => 'Subject: Ticket Approved: {$Ticket->Subject}
374
375 Greetings,
376
377 Your ticket has been approved by { eval { $Approver->Name } }.
378 Its Owner may now start to act on it.
379
380 Approver\'s notes: { $Notes }
381 '
382     },
383     {  Queue       => '___Approvals',
384        Name        => "Approval Rejected",    # loc
385        Description =>
386          "Notify Owner of their rejected ticket", # loc
387        Content => 'Subject: Ticket Rejected: {$Ticket->Subject}
388
389 Greetings,
390
391 Your ticket has been rejected by { eval { $Approver->Name } }.
392
393 Approver\'s notes: { $Notes }
394 '
395     },
396     {  Queue       => '___Approvals',
397        Name        => "Approval Ready for Owner",    # loc
398        Description =>
399          "Notify Owner of their ticket has been approved and is ready to be acted on", # loc
400        Content => 'Subject: Ticket Approved: {$Ticket->Subject}
401
402 Greetings,
403
404 The ticket has been approved, you may now start to act on it.
405
406 '
407     },
408     {  Queue       => 0,
409        Name        => "Forward",    # loc
410        Description => "Heading of a forwarded message", # loc
411        Content => q{
412 This is a forward of transaction #{$Transaction->id} of ticket #{ $Ticket->id }
413 }
414     },
415     {  Queue       => 0,
416        Name        => "Forward Ticket",    # loc
417        Description => "Heading of a forwarded Ticket", # loc
418        Content => q{
419
420 This is a forward of ticket #{ $Ticket->id }
421 }
422     },
423     {  Queue       => 0,
424        Name        => "Error: public key",    # loc
425        Description =>
426          "Inform user that he has problems with public key and couldn't recieve encrypted content", # loc
427        Content => q{Subject: We have no your public key or it's wrong
428
429 You received this message as we have no your public PGP key or we have a problem with your key. Inform the administrator about the problem.
430 }
431     },
432     {  Queue       => 0,
433        Name        => "Error to RT owner: public key",    # loc
434        Description =>
435          "Inform RT owner that user(s) have problems with public keys", # loc
436        Content => q{Subject: Some users have problems with public keys
437
438 You received this message as RT has problems with public keys of the following user:
439 {
440     foreach my $e ( @BadRecipients ) {
441         $OUT .= "* ". $e->{'Message'} ."\n";
442     }
443 }}
444     },
445     {  Queue       => 0,
446        Name        => "Error: no private key",    # loc
447        Description =>
448          "Inform user that we received an encrypted email and we have no private keys to decrypt", # loc
449        Content => q{Subject: we received message we cannot decrypt
450
451 You sent an encrypted message with subject '{ $Message->head->get('Subject') }',
452 but we have no private key it's encrypted to.
453
454 Please, check that you encrypt messages with correct keys
455 or contact the system administrator.}
456     },
457     {  Queue       => 0,
458        Name        => "Error: bad GnuPG data",    # loc
459        Description =>
460          "Inform user that a message he sent has invalid GnuPG data", # loc
461        Content => q{Subject: We received a message we cannot handle
462
463 You sent us a message that we cannot handle due to corrupted GnuPG signature or encrypted block. we get the following error(s):
464 { foreach my $msg ( @Messages ) {
465     $OUT .= "* $msg\n";
466   }
467 }}
468     },
469     {  Queue       => 0,
470        Name        => "PasswordChange",    # loc
471        Description =>
472          "Inform user that his password has been reset", # loc
473        Content => q{Subject: [{RT->Config->Get('rtname')}] Password reset
474
475 Greetings,
476
477 Someone at {$ENV{'REMOTE_ADDR'}} requested a password reset for you on {RT->Config->Get('WebURL')}
478
479 Your new password is:
480   {$NewPassword}
481 }
482     },
483
484                {   Queue       => '0',
485                    Name        => 'Email Digest',    # loc
486                    Description => 'Email template for periodic notification digests',  # loc
487                    Content => q[Subject: RT Email Digest
488
489 { $Argument }
490 ],
491                },
492
493 {
494     Queue       => 0,
495     Name        => "Error: Missing dashboard",    # loc
496     Description =>
497       "Inform user that a dashboard he subscribed to is missing", # loc
498     Content => q{Subject: [{RT->Config->Get('rtname')}] Missing dashboard!
499
500 Greetings,
501
502 You are subscribed to a dashboard that is currently missing. Most likely, the dashboard was deleted.
503
504 RT will remove this subscription as it is no longer useful. Here's the information RT had about your subscription:
505
506 DashboardID:  { $SubscriptionObj->SubValue('DashboardId') }
507 Frequency:    { $SubscriptionObj->SubValue('Frequency') }
508 Hour:         { $SubscriptionObj->SubValue('Hour') }
509 {
510     $SubscriptionObj->SubValue('Frequency') eq 'weekly'
511     ? "Day of week:  " . $SubscriptionObj->SubValue('Dow')
512     : $SubscriptionObj->SubValue('Frequency') eq 'monthly'
513       ? "Day of month: " . $SubscriptionObj->SubValue('Dom')
514       : ''
515 }
516 }
517 },
518     {  Queue       => 0,
519        Name        => 'Custom Field Transaction',
520        Description => 'Custom field value changed',
521        Content     => q[Subject: {$Transaction->BriefDescription()}
522
523 {RT->Config->Get('WebURL')}Ticket/Display.html?id={$Ticket->id}
524
525 {$Transaction->Content()}
526 ],
527     },
528
529 );
530 # }}}
531
532 @Scrips = (
533     {  Description    => 'On Correspond Open Tickets',
534        ScripCondition => 'On Correspond',
535        ScripAction    => 'Open Tickets',
536        Template       => 'Blank' },
537     {  Description    => 'On Owner Change Notify Owner',
538        ScripCondition => 'On Owner Change',
539        ScripAction    => 'Notify Owner',
540        Template       => 'Transaction' },
541     {  Description    => 'On Create Autoreply To Requestors',
542        ScripCondition => 'On Create',
543        ScripAction    => 'AutoReply To Requestors',
544        Template       => 'AutoReply' },
545     {  Description    => 'On Create Notify AdminCcs',
546        ScripCondition => 'On Create',
547        ScripAction    => 'Notify AdminCcs',
548        Template       => 'Transaction' },
549     {  Description    => 'On Correspond Notify AdminCcs',
550        ScripCondition => 'On Correspond',
551        ScripAction    => 'Notify AdminCcs',
552        Template       => 'Admin Correspondence' },
553     {  Description    => 'On Correspond Notify Requestors and Ccs',
554        ScripCondition => 'On Correspond',
555        ScripAction    => 'Notify Requestors And Ccs',
556        Template       => 'Correspondence' },
557     {  Description    => 'On Correspond Notify Other Recipients',
558        ScripCondition => 'On Correspond',
559        ScripAction    => 'Notify Other Recipients',
560        Template       => 'Correspondence' },
561     {  Description    => 'On Comment Notify AdminCcs as Comment',
562        ScripCondition => 'On Comment',
563        ScripAction    => 'Notify AdminCcs As Comment',
564        Template       => 'Admin Comment' },
565     {  Description    => 'On Comment Notify Other Recipients as Comment',
566        ScripCondition => 'On Comment',
567        ScripAction    => 'Notify Other Recipients As Comment',
568        Template       => 'Correspondence' },
569     {  Description    => 'On Resolve Notify Requestors',
570        ScripCondition => 'On Resolve',
571        ScripAction    => 'Notify Requestors',
572        Template       => 'Resolved' },
573     {  Description    => "On transaction, add any tags in the transaction's subject to the ticket's subject",
574        ScripCondition => 'On Transaction',
575        ScripAction    => 'Extract Subject Tag',
576        Template       => 'Blank' },
577     {  Description    => 'On Correspond, cancel future resolve',
578        ScripCondition => 'On Correspond',
579        ScripAction    => 'Cancel Scheduled Resolve',
580        Template       => 'Blank' },
581 );
582
583 @ACL = (
584     { UserId => 'root',        # - principalid
585       Right  => 'SuperUser', },
586
587     { GroupDomain => 'SystemInternal',
588       GroupType => 'privileged',
589       Right  => 'ShowApprovalsTab', },
590
591 );
592
593 # Predefined searches
594
595 @Attributes = (
596     { Name => 'Search - My Tickets',
597       Description => '[_1] highest priority tickets I own', # loc
598       Content     =>
599       { Format =>  q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
600                  . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
601                  . q{Priority, QueueName, ExtendedStatus},
602         Query   => " Owner = '__CurrentUser__' AND ( Status = 'new' OR Status = 'open')",
603         OrderBy => 'Priority',
604         Order   => 'DESC'
605       },
606     },
607     { Name => 'Search - Unowned Tickets',
608       Description => '[_1] newest unowned tickets', # loc
609       Content     =>
610 # 'Take' #loc
611       { Format =>  q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
612                  . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
613                  . q{QueueName, ExtendedStatus, CreatedRelative, }
614                  . q{'<A HREF="__WebPath__/Ticket/Display.html?Action=Take&id=__id__">__loc(Take)__</a>/TITLE:NBSP'},
615         Query   => " Owner = 'Nobody' AND ( Status = 'new' OR Status = 'open')",
616         OrderBy => 'Created',
617         Order   => 'DESC'
618       },
619     },
620     { Name => 'Search - Bookmarked Tickets',
621       Description => 'Bookmarked Tickets', #loc
622       Content     =>
623       { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
624                 . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
625                 . q{Priority, QueueName, ExtendedStatus, Bookmark},
626         Query   => "id = '__Bookmarked__'",
627         OrderBy => 'LastUpdated',
628         Order   => 'DESC' },
629     },
630     { Name => 'HomepageSettings',
631       Description => 'HomepageSettings',
632       Content =>
633       { 'body' => # loc
634         [ { type => 'system', name => 'My Tickets' },
635           { type => 'system', name => 'Unowned Tickets' },
636           { type => 'system', name => 'Bookmarked Tickets' },
637           { type => 'component', name => 'QuickCreate' },
638         ],
639         'summary' => # loc
640         [
641           { type => 'component', name => 'MyReminders' },
642           { type => 'component', name => 'Quicksearch' },
643           { type => 'component', name => 'Dashboards' },
644           { type => 'component', name => 'RefreshHomepage' },
645         ],
646       },
647     },
648 );