Taiga 1274 (24976) Updated guided reports process
[kohadocs.git] / source / apis_protocols.rst
1 .. include:: images.rst
2
3 Other APIs and protocols
4 =============================
5
6 .. _sip2-label:
7
8 SIP2
9 -----------------------------
10
11 SIP2 (Session Initiation Protocol) is a protocol for communication between devices.
12
13 In the context of Koha SIP2 is used for communication between Self Check (SC) machines i.e. self checkout machines, and the Automated Circulation System (also known as ACS which in this case is the server running Koha).
14
15 SIP2 communications consist of requests and responses.
16
17 The self checkout machines are ‘dumb’ and so they send requests to the Koha server which runs logic which determines a particular outcome which is sent as a response message back to the client self checkout machine, and this is then conveyed to the user.
18
19 .. warning:: Security notice regarding using SIP2 service:
20              To ensure that your SIP2 traffic is secure as it passes over the internet you need to make sure that you are using a VPN or   stunnel.
21
22
23 .. _setting-up-sip2-label:
24
25 Setting up SIP2
26 ~~~~~~~~~~~~~~~
27
28 If you installed Koha using Debian packages then SIP2 setup is easy, simply follow these steps:
29
30
31 1. In your terminal (in the root Koha directory) write in:
32 *sudo koha-enable-sip <instancename>*
33
34
35 2. Now you need to configure the SIP2 settings, to do this you need to edit the SIPconfig.xml file which exists in the /etc/koha/sites/<instancename>/ directory.
36 You will need to edit this file as root because it contains passwords (to do so write ‘sudo’  at the start of your command).
37
38 e.g.
39 *sudo vi /etc/koha/sites/<instancename>/SIPconfig.xml*
40
41 .. note:: Important note: There are three areas of interest in the SIPconfig.xml file that you need to change. These are: service, account and institution.
42
43
44 **Service**
45
46
47         2.1 Change the port value near the top of the SIPconfig.xml file (identified by the number 1 in the below screen shot), so it has the same IP address as set further down the SIPconfig.xml file identified by 2.
48
49         .. note:: Make sure the two port values don’t have the same port number as you cannot have the same port being listened to by two different services. When deciding upon the port number make sure it is a high number (i.e. above 1000) because all ports below 1000 require root permissions.
50
51 |image1122|
52
53
54
55 **Account**
56
57 The account(s) you define in the SIPconfig.xml file are simply account(s) permitted to use the SIP2 service i.e. you're defining who can send and receive SIP2 commands.
58
59         .. warning:: Account information that you write here must also exist in the Koha database i.e. you need to create a patron in the Koha staff interface with the same username, password (making sure to assign them circulate permissions) as the user account you write into the SIPconfig.xml file.
60
61         .. note:: It is highly recommended that you only write in Koha user accounts with circulate permissions.
62
63                                 The reason we want SIP2 users to only have circulate permissions rather than superlibrarian permissions is to reduce the access SIP2 users have to confidential patron data in case the system was compromised.
64
65                                 If the ACS or the SC were compromised then having all SIP2 users only having circulation permissions means that an intruder would only be able to access patron data via the terminal rather than the web interface as well (which would be available with superlibrarian permissions). So it is simply a matter of protecting your users.
66
67 |image1119|
68
69
70 **Account value definitions:**
71
72
73 1. Login id: This is the account username. - Modify this accordingly
74 2. Password: Account password - Modify this accordingly
75 3. Delimiter: The type of delimiter for account information - Leave as default
76 4. error-detect -  Leave as default
77 5. Institution: This is the branchcode for the library that the user belongs to. NOTE: This institution needs to be defined further down in the institution area of the SIPconfig.xml file and it must also exist in the Koha database. i.e. you need to create a library with the same branchcode in Koha staff interface.
78 6. encoding: This is the standard used to encode the account data
79 7.  Terminator: This needs to match the terminator value of the SIP2 server. - Modify this if you know the terminator value of the SIP2 server.
80
81 It is also possible to add custom patron attributes to SIP2 profiles using the format such as:
82
83     <patron_attribute field="XX" code="CODE1" />
84     <patron_attribute field="XY" code="CODE2" />
85     <patron_attribute field="XZ" code="CODE3" />
86
87 **Institution**
88
89
90         The institution information you define here must match a library created in the Koha staff interface.
91
92         .. warning:: You need to make sure all the institutions that accounts are assigned to further up in the SIPconfig.xml file are also defined in the institution area of the same file.
93
94 |image1120|
95
96 **Institution value definitions:**
97
98
99         1. Institution id: The branchcode of the library. - Modify this accordingly.
100         Must be the same as created in Koha and the account area.
101
102 2. Implementation: Defines the code that will be run. - Leave as default
103
104  3. Policy: Policy defines the permitted SIP2 commands allowed from SC’s in this institution.
105  For example: renewal=”true” means that SC’s at that institution have permission to send renewal item SIP2 commands.
106
107  4. Starting SIP2
108  Simply write in the command:
109  *sudo koha-start-sip <instancename>*
110
111 .. note:: Now you have a running SIP2 server.
112
113
114 .. _using-sip2-label:
115
116 Using SIP2
117 ~~~~~~~~~~
118
119 SIP2 is a communication protocol. The messages sent in SIP2 are either requests or responses. The SC’s send request messages to the ACS which will run some logic and send back the resulting value to the SC as a response message.
120
121 The request messages contain arguments, which are data values used by the ACS in its functions to perform the required task such as renewing items.
122
123 **SIP2 commands**
124
125 If you want to manually use/test SIP2 then you will be writing and receiving messages via the Linux terminal.
126
127 To be able to send and receive messages with the SIP2 server you need to use telnet to open a SIP2 connection. You need to specify the port number you want telnet to use.
128
129 To find this information look at the service area at the top of the SIPconfig.xml file (look for the port number as pointed out by the arrow in the below screenshot).
130
131 |image1121|
132
133
134 1. Write into the terminal
135
136    *telnet localhost <portnumber>*
137
138    e.g. *telnet localhost 8023*
139
140 2. Now write in the username and password set in one of the accounts in the     SIPconfig.xml file.
141
142 3. Now you are connected to the SIP2 server you can start writing and sending request commands. The connection to the SIP2 server does time out fast so if haven’t finished writing and receiving commands simply write in:
143
144    *telnet localhost <portnumber>*
145
146    to restart the SIP2 connection.
147
148 **SIP2 command syntax**
149
150 Every SIP2 command has a 2 digit numerical prefix which defines what the command is doing.
151
152 e.g. To get information about a patron you start your command with the prefix: 63. The response from the server also has a corresponding numerical prefix.
153
154 Below is an example of a SIP2 request message to request patron information (in this example a Koha patron account with the user name ‘joe’, password ‘joes’, and card number ‘y76t5r43’ has been created in the Koha staff interface).
155
156 Additionally a library with the branchcode of ‘WEL’ has been created in the Koha staff interface and is also defined in the institution area of the SIPconfig.xml file):
157
158 |image1123|
159
160 So the format of this SIP2 request message is:
161
162 |image1124|
163
164 .. note:: The summary value is a 10 character value. If a Y is written in for the summary value then you will be able to get both a summary and more detailed informational output.
165
166 The value in the <YYYYMMDD>       <HHMMSS> is the current datetime, by leaving a 4 space gap between the YYYYMMDD and HHMMSS this indicates you want to use local time rather than UTC.
167
168 .. note:: In this manual letter codes for the various fields are used where possible in describing the SIP2 message fields e.g. AO<institutionid>.
169
170                                         These letter codes can be written in the SIP2 commands into the Linux terminal, but make sure when substituting values in for the fields (values inside the <>) that you do not write in the <> brackets.
171
172
173 **SIP2 messages:**
174
175
176 **Block patron**
177
178 This uses the prefix 01 for request messages and 24 for response messages.
179
180 Request message:
181
182 |image1125|
183
184
185 .. note:: Card retained is a single character field of either ‘Y’ or ‘N’  which tells the ACS that a card has been retained by the self checkout machine.
186
187 Response message:
188
189 |image1126|
190
191 .. note:: <patronstatus> is a 14 character long value. The value Y in the string means true. Each position in this string (starting at 0) has a single corresponding value (Y or N) in the string.
192
193                                         e.g. a Y at position 1 (the second value in the string) means that the patrons renewal privileges are denied.
194
195
196 **Check-in items**
197
198
199 This uses the request message (messages sent to the ACS) prefix of 09 and the response prefix of 10 (sent to the SC).
200
201 Request message:
202
203 |image1127|
204
205 .. note:: * <no block (Offline)> is a single character field of either ‘Y’ or ‘N’ which indicates if the transaction is being performed offline. As offline transactions are not supported you need to write ‘N’ if you are testing this message out manually.
206
207                                         * <transactiondate> this is a 18 character field with the date is the format: YYYYMMDDZZZZHHMMSS.
208
209                                         ZZZZ is the timezone, if you want to set it to local you need to leave 4 blank spaces, but if you want to set it to the UTC (Coordinated Universal Time) then you need to write in 3 blank spaces and a Z.
210
211 Response message:
212
213 |image1128|
214
215 .. note:: Alert type could have one of several values:
216         00 : Unknown
217         01: local hold
218         02: remote hold
219         03: ILL Transfer
220         04: transfer
221         99: Other
222
223 If an item is resensitized then the value of <resentitize> should be Y otherwise it should be N. Rensensitizing items is done to ensure that if someone tries to steal the item they are detected.
224
225 **Checkout items**
226
227 This uses the request message prefix of 11 and the response message prefix of 12.
228 It has similar syntax to the check-in command, outlined above except the prefixes are different.
229
230 **Hold** – May not yet be supported on some systems. This has a request message numerical prefix of 15 and a response message prefix of 16.
231
232 Request message:
233
234 |image1129|
235
236 .. note:: <holdmode> is a single character value. + means add a hold, - means delete a hold and * means change a hold.
237
238 Response message:
239
240 |image1130|
241
242 .. note:: * <ok> is a single length value which is either 0 (for hold is not permitted or was not successful) or 1 (for hold is permitted and was successful).
243
244                                         * <available> is a single length value which is either Y or N. Y means the item is currently in the library, whilst N means the item is currently on loan/someone else has created a hold on the item.
245
246
247 **Item information: This uses the request command prefix of 17, and the response command prefix of 18**
248
249 Request message:
250
251 |image1131|
252
253 .. note:: See the check-in items command (described above) to find out what the <xact_date> value is.
254
255                                         The terminal password is optional.
256
257 Response message:
258
259 |image1132|
260
261 **Item status update  This uses the request message prefix of 19 and the response message prefix of 20**
262
263 Request message:
264
265 |image1133|
266
267 .. note:: <itemproperties> is not a fixed length value, and you can optionally write in values such as item size and these values will be stored in the Koha database for the item.
268
269 Response message:
270
271 |image1134|
272
273 .. note:: <itempropertiesok> is a single length character value which is either 0 or 1. 1 identifies that the <itemproperties> value defined in the item status update request message was successfully stored in the Koha database.
274
275 **Patron status**
276
277 This uses the request message prefix 23 and the response message prefix of 24.
278
279 Request message:
280
281 |image1135|
282
283 Response message:
284
285 |image1136|
286
287 .. note:: The value displayed for <patronvalidity> is Y (valid) and N (invalid)
288                                         The value in the <YYYYMMDD>    < HHMMSS> is the current date/time.
289
290                                         The reason for the gap between the two values is to define that you want to use localtime rather than UTC.
291
292
293 **Patron enable - This is not yet supported. This uses the request message prefix of 25 and the response message prefix of 26**
294
295 .. note:: This command undoes the block patron command.
296
297 Request message:
298
299 |image1137|
300
301 Response message:
302
303 |image1138|
304
305 **Renew This uses the request message prefix of 29 and the response message prefix of 30**
306
307 Request message:
308
309 |image1139|
310
311 .. note:: * <thirdpartyallowed> is  a single character value which is either Y or N. If it is Y then third parties can renew items.
312
313                                         * <noblock> is a single character value which is either Y or N. If it is Y then this means that the item was checkin/out when the ACS was offline.
314
315                                         * <nbduedate> is the transaction date of checkin/checkout when the ACS was offline.
316
317                                         * <feeacknowledged> is a single character value which is either Y or N. This indicates if the user accepts the fee associated with the item they are renewing.
318
319 Response message:
320
321 |image1140|
322
323 .. note:: * <ok> is a single character value which is either 0 or 1. A value of 1 means the item was successfully renewed, 0 means item was not successfully renewed.
324
325                                         * <renewalok> is a single character value which is either Y or N. The logic for the setting of the value of <renewalok> is Y is set when the item is already checkout by the user and so it should be desensitized thereby renewing it, whereas N is set if the item is not already checkout to the patron and so it should not be renewed.
326
327                                         In other words don’t let patrons renew books when they are not currently checked out to them.
328
329                                         * <magneticmedia> is a single character value which is either Y (for yes), N ( for no), or U (for unknown).
330
331                                         * <mediatype> is a three numerical character long value. For a list of the values go to: http://multimedia.3m.com/mws/media/355361O/sip2-protocol.pdf
332
333
334 **End session**
335
336 This uses the request message prefix of 35 and the response message prefix of 36
337
338 Request message:
339
340 |image1141|
341
342 Response message:
343
344 |image1142|
345
346 .. note:: <success_or_failure> is either Y for success or N for failure.
347
348 **Fee Paid – May not be implemented yet. This uses a request message prefix of 37 and a response message prefix of 38**
349
350 Request message:
351
352 |image1143|
353
354 .. note:: * <feetype> is a two numerical character value which is between 01 and 99. To see a list of fee type values go to http://multimedia.3m.com/mws/media/355361O/sip2-protocol.pdf
355
356                                         * <paymenttype> is a two character numerical value between 00 and 99. 00 is cash, 01 is Visa, and 02 is credit card.
357
358                                         * <currencytype> is a 3 alphanumeric character long value identifying the currency the fee paid was in.
359
360 Response message:
361
362 |image1144|
363
364 .. note:: <paymentaccepted> is a single alphanumeric character long value which is either Y (payment has been accepted) or N (payment has not been accepted).
365
366
367 **Patron information**
368
369 This uses the request message prefix of 63 and the response message prefix of 64
370
371 Request message:
372
373 |image1145|
374
375 Response message:
376
377 |image1146|
378
379 .. note::  <valid patron> is Y for valid and N for not valid.
380
381 .. note::  <hold itemcount><overdueitemcount><chargeditemscount><fienitemscount><recallitemscount><unavaliableholdscount> are all 4 numerical character long values.
382
383 **Renew all**
384
385 This uses the request message prefix of 65 and the  response message prefix of 66.
386
387 Request message:
388
389 |image1147|
390
391 Response message:
392
393 |image1148|
394
395 .. note:: * <renewedcount> is a 4 numerical character long value denoting the number of items that were renewed.
396
397                                         * <unrenewedcount>, has the same format as the <renewedcount> but it denotes the number of items not renewed.
398
399 **Login**
400
401 This uses the request message prefix of 93, and the response message prefix of 94.
402
403 Request message:
404
405 |image1149|
406
407 .. note:: <UIDalgorithm> and <PWDalgorithm> are one character long values indicating the type of algorithm to use to encrypt the loginuserid and loginpassword respectively.
408
409                                         Writing in the value of 0 means these values will not be encrypted.
410
411 Response message:
412 *941* is a successful login.
413 *940* is an unsuccessful login
414 *[connection closed by foreign host.]* is a unsuccessful login
415
416
417 **Resend**
418
419 This requests the receiving device to resend its last message.
420
421 SC -> ACS resend request is *97*
422
423 ACS -> SC resend request is *96*
424
425
426 **Status of the ACS and SC**
427
428 This has the request message prefix of 99 and the response message prefix of 98.
429
430 Request message:
431
432 |image1150|
433
434
435 .. note:: The status code is one of 3 values.
436                                         * 0: SC is ok
437                                         * 1: SC is out of paper
438                                         * 2: SC is shutting down
439                                         max print width is a 3 character long value which is the integer number of characters the client can print
440                                         Protocol version is a 4 character value in the format x.xx
441
442 Response message:
443
444 |image1151|
445
446 .. note:: If you get the response message ‘96’ this means that the request message is not valid/understood.
447
448
449 **Troubleshooting SIP2**
450
451 Can’t connect to remote host when writing in the command telnet localhost <portnumber>
452
453 3 solutions for this issue to try are:
454
455         1. Check the portnumber your writing in the above command is the port number written in the SIPconfig.xml file at the location indicated by the number 1.
456         i.e. in the below example because the portnumber is 6001 the correct command would be:
457         telnet localhost 6001
458
459         2. Check if any userid is written more than once in the SIPconfig.xml file.
460         The userid (which is simply the username of the Koha user)  needs to be unique within the SIPconfig.xml file. If you have the same userid multiple times in your SIPconfig.xml file this will cause the connection to SIP2 to fail before you get a chance to authenticate.
461
462         3. Check the account defined in the SIPconfig.xml file also exists in the Koha database with the same username, password and has circulate permissions.
463         If you have dropped and recreated the Koha database after creating the patron account in the Koha staff interface and the SIPconfig.xml file then that patron account will not exist in the Koha database and so you will need to recreate them in the Koha staff interface.
464
465 To access the SIP2 logs in your Koha home directory navigate to the following directory:
466 /var/log/koha/<instancename>
467
468 Then view the output of the sip-error.log and the sip-output.log files which give more detailed information about the SIP2 error.
469
470 * cat sip-error.log
471 * cat sip-output.log
472
473
474 **Useful links on SIP2 commands:**
475
476 http://multimedia.3m.com/mws/media/355361O/sip2-protocol.pdf
477
478 .. _ldap-label:
479
480 LDAP
481 -----------------------------
482
483 Setting up LDAP (Lightweight Directory Access Protocol) for Koha allows you to store all user information in a central database which is accessed both by your organisations Koha instance and for users to authenticate on other existing systems.
484
485 LDAP is a protocol used for file discovery over networks and network authentication.
486
487 LDAP configurations are powerful allowing you to customise how Koha and LDAP interact. LDAP  can be configured so that new accounts created in LDAP can be synced down into the Koha database, additionally updates to the LDAP user account are synced down to the Koha database.
488
489 However Koha cannot sync data up to the LDAP server, thus the data traffic when using LDAP is only one directional.
490
491 Auth_By_Bind is set to 1 where a Microsoft Windows Active Directory system is in use in the LDAP database.
492
493 **Before going through the steps to configure LDAP you will need the following
494 information/actions from the organisation**
495
496 * The organisation will need to open a port to allow access to their AD from the server.
497
498 * Information on the access to the AD server (IP address/hostname, port, SSL info)
499
500 * Information on the configuration of the AD server (relevant OUs, DCs, CN formats relative to usernames)
501
502 * Mapping between AD fields and Koha fields, including defaults
503
504 * Default values for things not provided by AD (categorycode, branchcode for example)
505
506 * To authenticate a user do we bind as them (seems to be common for AD) or do we use an account and login with that and then check? If the latter, we'll need details of how to log in
507
508 * Do the existing usernames in Koha match the usernames that we'll be using to look them up in AD? If so, good. If not, how will we deal with duplicate users?
509
510 **Steps to set up LDAP with your Koha instance**
511
512
513 1 In Linux terminal navigate to the directory containing the koha-conf.xml file which will either be in:
514 * /etc/koha/sites/<instance-name>/
515 OR
516 *  /etc/koha/
517
518 2 Open the koha-conf.xml file with root permissions:
519 sudo vi koha-conf.xml
520
521 3 Scroll down to the line containing ‘<useldapserver>0</useldapserver>’ and change it to:
522 <useldapserver>1</useldapserver>
523
524 4 Then in the next line below write in the LDAP configurations below: Note all fields highlighted in yellow need to be replaced with the appropriate values for your organisations LDAP server.
525
526 ::
527
528         <ldapserver id="<ldapserverid>">
529
530         <hostname><hostname></hostname>
531
532         <base>dc=<domaincontroller>,dc=<domaincontroller></base>
533
534         <user>cn=<nameofuser>, dc=<domaincontroller>,dc=<domaincontroller></user> <!--This is the username of user account with permissions to query the LDAP server -->
535
536         <pass><password></pass> <!-- This is password of the user account with permissions  to query the LDAP server-->
537
538         <replicate><either0or1></replicate> <!-- add new users from LDAP to Koha database -->
539
540         <update><either0or1></update> <!-- update existing users in Koha database -->
541
542         <auth_by_bind><either0or1></auth_by_bind> <!-- set to 1 to authenticate by binding instead of password comparison, e.g., to use Active Directory -->
543
544         <principal_name><principalname></principal_name> <!-- optional, for     auth_by_bind: a printf format to make userPrincipalName from koha userid        -->
545
546         <mapping> <!-- match koha SQL field names to your LDAP record field names-->
547
548         <firstname is="givenname"></firstname>
549
550         <surname is="sn"></surname>
551
552         <address is="postaladdress"></address>
553
554         <city is="l">Athens, OH</city>    <!-- Athens,OH is the default value for
555         city of all users logging into Koha -->
556
557         <zipcode is="postalcode"></zipcode>
558
559         <branchcode is="branch">Central</branchcode>
560
561         <userid is="uid"></userid>
562
563         <password is="userpassword"></password>
564
565         <email is="mail"></email>
566
567         <categorycode is="employeetype">EM</categorycode>
568
569         <phone is="telephonenumber"></phone>
570
571         </mapping>
572
573         </ldapserver>
574     
575 ::
576
577
578 5 Save and exit the koha-conf.xml file
579
580 6 Check the LDAP connection works by writing in:
581
582 ldapsearch -H ldaps://host.name  -s base -x  -w "" -d 1
583
584
585 .. note:: Note about hostname
586                                         Hostname can either be a alphanumerical name or it can be the LDAP server IP address (its optional to write port number). By default the ldaps default port number is 636, whilst ldap default port number is 389
587
588
589 .. note:: Note about the replicate and update fields
590                                         The replicate  LDAP config field for LDAP in the koha-conf.xml file allow the Koha database to be added to with a new borrower account whenever a user logs into Koha (either the staff client or OPAC) with their LDAP username and password (assuming the same username and password does not already exist in the Koha database).
591
592                                         Whereas the update LDAP config field (in the same file allows) allows for user information in the LDAP database to be synced down to the Koha database.
593                                         e.g. if someone gets married and their surname changes then the new surname only needs to       be updated in the existing LDAP database and that will be synced down to the Koha       database automatically if the update configuration is set to 1.
594
595
596 About the mapping fields (the fields highlighted green)
597 <city is="l">Athens, OH</city>
598
599 The left hand column name (highlighted yellow) is the name of the column in the LDAP database.
600
601 The column name inside quote marks (highlighted pink) is the name of the column in the Koha database. NOTE: This can be filled with any value if there is no equivalent column name in the Koha database as exists in the LDAP database.
602
603 The value highlighted cyan is the default value for the specified Koha and LDAP columns. So in the above example all user records in the Koha and LDAP databases  will by default have the city value of ‘Athens, OH’.
604
605 Example of the LDAP configurations:
606
607 ::
608
609  <useldapserver>1</useldapserver><!-- see C4::Auth_with_ldap for extra configs you must add if you want to turn this on -->
610
611  <ldapserver id="ldapserver" listenref="ldapserver">
612
613  <hostname>ldaps://example.co.au</hostname>
614
615  <base>ou=employees,dc=companya,dc=com,dc=au</base>
616
617  <user></user> <!-- DN, if not anonymous -->
618
619  <pass></pass> <!-- password, if not anonymous -->
620
621  <auth_by_bind>1</auth_by_bind>
622
623  <replicate>1</replicate> <!-- add new users from LDAP to Koha database -->
624
625  <update>0</update> <!-- update existing users in Koha database -->
626
627  <principal_name>ou=employees,dc=companya,dc=com,dc=au</principal_name>
628
629  <mapping>
630
631  <userid       is="uid"            ></userid>
632
633  <cardnumber   is="uid"            ></cardnumber>
634
635  <email        is="mail"           ></email>
636
637  <surname      is="sn"             ></surname>
638
639  <firstname    is="givenname"      ></firstname>
640
641  <categorycode is="1">EM</categorycode>
642
643  <branchcode   is="1">SYD</branchcode>
644
645  </mapping>
646
647  </ldapserver>
648
649 ::
650
651
652
653 The values in the mapping area are not always the same, and it depends on what is in your organisations LDAP database. For example some organisations do not use <userid> instead each user is only identified by the <email> field and so no <userid> is written.
654
655
656 **Troubleshooting LDAP**
657
658 The log that LDAP errors are printed to depends on several factors:
659
660 If plack is not disabled then LDAP errors are displayed in the plack-error.log file
661 If plack is disabled then the location that LDAP errors are printed to is either the opac-error.log file (if the user is logging into the OPAC) or the intranet-error.log file (if the user is logging into the staff client)
662 All of these three log files are accessible in the following directory:
663
664 /var/log/koha/<instance>/