001package org.hl7.fhir.r4.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034
035// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
036
037import java.util.*;
038
039import org.hl7.fhir.utilities.Utilities;
040import org.hl7.fhir.r4.model.Enumerations.*;
041import ca.uhn.fhir.model.api.annotation.ResourceDef;
042import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
043import ca.uhn.fhir.model.api.annotation.Child;
044import ca.uhn.fhir.model.api.annotation.ChildOrder;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.Block;
047import org.hl7.fhir.instance.model.api.*;
048import org.hl7.fhir.exceptions.FHIRException;
049/**
050 * The Evidence resource describes the conditional state (population and any exposures being compared within the population) and outcome (if specified) that the knowledge (evidence, assertion, recommendation) is about.
051 */
052@ResourceDef(name="Evidence", profile="http://hl7.org/fhir/StructureDefinition/Evidence")
053@ChildOrder(names={"url", "identifier", "version", "name", "title", "shortTitle", "subtitle", "status", "date", "publisher", "contact", "description", "note", "useContext", "jurisdiction", "copyright", "approvalDate", "lastReviewDate", "effectivePeriod", "topic", "author", "editor", "reviewer", "endorser", "relatedArtifact", "exposureBackground", "exposureVariant", "outcome"})
054public class Evidence extends MetadataResource {
055
056    /**
057     * A formal identifier that is used to identify this evidence when it is represented in other formats, or referenced in a specification, model, design or an instance.
058     */
059    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
060    @Description(shortDefinition="Additional identifier for the evidence", formalDefinition="A formal identifier that is used to identify this evidence when it is represented in other formats, or referenced in a specification, model, design or an instance." )
061    protected List<Identifier> identifier;
062
063    /**
064     * The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.
065     */
066    @Child(name = "shortTitle", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
067    @Description(shortDefinition="Title for use in informal contexts", formalDefinition="The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary." )
068    protected StringType shortTitle;
069
070    /**
071     * An explanatory or alternate title for the Evidence giving additional information about its content.
072     */
073    @Child(name = "subtitle", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
074    @Description(shortDefinition="Subordinate title of the Evidence", formalDefinition="An explanatory or alternate title for the Evidence giving additional information about its content." )
075    protected StringType subtitle;
076
077    /**
078     * A human-readable string to clarify or explain concepts about the resource.
079     */
080    @Child(name = "note", type = {Annotation.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
081    @Description(shortDefinition="Used for footnotes or explanatory notes", formalDefinition="A human-readable string to clarify or explain concepts about the resource." )
082    protected List<Annotation> note;
083
084    /**
085     * A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence.
086     */
087    @Child(name = "copyright", type = {MarkdownType.class}, order=4, min=0, max=1, modifier=false, summary=false)
088    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence." )
089    protected MarkdownType copyright;
090
091    /**
092     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
093     */
094    @Child(name = "approvalDate", type = {DateType.class}, order=5, min=0, max=1, modifier=false, summary=false)
095    @Description(shortDefinition="When the evidence was approved by publisher", formalDefinition="The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage." )
096    protected DateType approvalDate;
097
098    /**
099     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
100     */
101    @Child(name = "lastReviewDate", type = {DateType.class}, order=6, min=0, max=1, modifier=false, summary=false)
102    @Description(shortDefinition="When the evidence was last reviewed", formalDefinition="The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date." )
103    protected DateType lastReviewDate;
104
105    /**
106     * The period during which the evidence content was or is planned to be in active use.
107     */
108    @Child(name = "effectivePeriod", type = {Period.class}, order=7, min=0, max=1, modifier=false, summary=true)
109    @Description(shortDefinition="When the evidence is expected to be used", formalDefinition="The period during which the evidence content was or is planned to be in active use." )
110    protected Period effectivePeriod;
111
112    /**
113     * Descriptive topics related to the content of the Evidence. Topics provide a high-level categorization grouping types of Evidences that can be useful for filtering and searching.
114     */
115    @Child(name = "topic", type = {CodeableConcept.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
116    @Description(shortDefinition="The category of the Evidence, such as Education, Treatment, Assessment, etc.", formalDefinition="Descriptive topics related to the content of the Evidence. Topics provide a high-level categorization grouping types of Evidences that can be useful for filtering and searching." )
117    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/definition-topic")
118    protected List<CodeableConcept> topic;
119
120    /**
121     * An individiual or organization primarily involved in the creation and maintenance of the content.
122     */
123    @Child(name = "author", type = {ContactDetail.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
124    @Description(shortDefinition="Who authored the content", formalDefinition="An individiual or organization primarily involved in the creation and maintenance of the content." )
125    protected List<ContactDetail> author;
126
127    /**
128     * An individual or organization primarily responsible for internal coherence of the content.
129     */
130    @Child(name = "editor", type = {ContactDetail.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
131    @Description(shortDefinition="Who edited the content", formalDefinition="An individual or organization primarily responsible for internal coherence of the content." )
132    protected List<ContactDetail> editor;
133
134    /**
135     * An individual or organization primarily responsible for review of some aspect of the content.
136     */
137    @Child(name = "reviewer", type = {ContactDetail.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
138    @Description(shortDefinition="Who reviewed the content", formalDefinition="An individual or organization primarily responsible for review of some aspect of the content." )
139    protected List<ContactDetail> reviewer;
140
141    /**
142     * An individual or organization responsible for officially endorsing the content for use in some setting.
143     */
144    @Child(name = "endorser", type = {ContactDetail.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
145    @Description(shortDefinition="Who endorsed the content", formalDefinition="An individual or organization responsible for officially endorsing the content for use in some setting." )
146    protected List<ContactDetail> endorser;
147
148    /**
149     * Related artifacts such as additional documentation, justification, or bibliographic references.
150     */
151    @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
152    @Description(shortDefinition="Additional documentation, citations, etc.", formalDefinition="Related artifacts such as additional documentation, justification, or bibliographic references." )
153    protected List<RelatedArtifact> relatedArtifact;
154
155    /**
156     * A reference to a EvidenceVariable resource that defines the population for the research.
157     */
158    @Child(name = "exposureBackground", type = {EvidenceVariable.class}, order=14, min=1, max=1, modifier=false, summary=true)
159    @Description(shortDefinition="What population?", formalDefinition="A reference to a EvidenceVariable resource that defines the population for the research." )
160    protected Reference exposureBackground;
161
162    /**
163     * The actual object that is the target of the reference (A reference to a EvidenceVariable resource that defines the population for the research.)
164     */
165    protected EvidenceVariable exposureBackgroundTarget;
166
167    /**
168     * A reference to a EvidenceVariable resource that defines the exposure for the research.
169     */
170    @Child(name = "exposureVariant", type = {EvidenceVariable.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
171    @Description(shortDefinition="What exposure?", formalDefinition="A reference to a EvidenceVariable resource that defines the exposure for the research." )
172    protected List<Reference> exposureVariant;
173    /**
174     * The actual objects that are the target of the reference (A reference to a EvidenceVariable resource that defines the exposure for the research.)
175     */
176    protected List<EvidenceVariable> exposureVariantTarget;
177
178
179    /**
180     * A reference to a EvidenceVariable resomece that defines the outcome for the research.
181     */
182    @Child(name = "outcome", type = {EvidenceVariable.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
183    @Description(shortDefinition="What outcome?", formalDefinition="A reference to a EvidenceVariable resomece that defines the outcome for the research." )
184    protected List<Reference> outcome;
185    /**
186     * The actual objects that are the target of the reference (A reference to a EvidenceVariable resomece that defines the outcome for the research.)
187     */
188    protected List<EvidenceVariable> outcomeTarget;
189
190
191    private static final long serialVersionUID = 137844509L;
192
193  /**
194   * Constructor
195   */
196    public Evidence() {
197      super();
198    }
199
200  /**
201   * Constructor
202   */
203    public Evidence(Enumeration<PublicationStatus> status, Reference exposureBackground) {
204      super();
205      this.status = status;
206      this.exposureBackground = exposureBackground;
207    }
208
209    /**
210     * @return {@link #url} (An absolute URI that is used to identify this evidence when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
211     */
212    public UriType getUrlElement() { 
213      if (this.url == null)
214        if (Configuration.errorOnAutoCreate())
215          throw new Error("Attempt to auto-create Evidence.url");
216        else if (Configuration.doAutoCreate())
217          this.url = new UriType(); // bb
218      return this.url;
219    }
220
221    public boolean hasUrlElement() { 
222      return this.url != null && !this.url.isEmpty();
223    }
224
225    public boolean hasUrl() { 
226      return this.url != null && !this.url.isEmpty();
227    }
228
229    /**
230     * @param value {@link #url} (An absolute URI that is used to identify this evidence when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
231     */
232    public Evidence setUrlElement(UriType value) { 
233      this.url = value;
234      return this;
235    }
236
237    /**
238     * @return An absolute URI that is used to identify this evidence when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence is stored on different servers.
239     */
240    public String getUrl() { 
241      return this.url == null ? null : this.url.getValue();
242    }
243
244    /**
245     * @param value An absolute URI that is used to identify this evidence when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence is stored on different servers.
246     */
247    public Evidence setUrl(String value) { 
248      if (Utilities.noString(value))
249        this.url = null;
250      else {
251        if (this.url == null)
252          this.url = new UriType();
253        this.url.setValue(value);
254      }
255      return this;
256    }
257
258    /**
259     * @return {@link #identifier} (A formal identifier that is used to identify this evidence when it is represented in other formats, or referenced in a specification, model, design or an instance.)
260     */
261    public List<Identifier> getIdentifier() { 
262      if (this.identifier == null)
263        this.identifier = new ArrayList<Identifier>();
264      return this.identifier;
265    }
266
267    /**
268     * @return Returns a reference to <code>this</code> for easy method chaining
269     */
270    public Evidence setIdentifier(List<Identifier> theIdentifier) { 
271      this.identifier = theIdentifier;
272      return this;
273    }
274
275    public boolean hasIdentifier() { 
276      if (this.identifier == null)
277        return false;
278      for (Identifier item : this.identifier)
279        if (!item.isEmpty())
280          return true;
281      return false;
282    }
283
284    public Identifier addIdentifier() { //3
285      Identifier t = new Identifier();
286      if (this.identifier == null)
287        this.identifier = new ArrayList<Identifier>();
288      this.identifier.add(t);
289      return t;
290    }
291
292    public Evidence addIdentifier(Identifier t) { //3
293      if (t == null)
294        return this;
295      if (this.identifier == null)
296        this.identifier = new ArrayList<Identifier>();
297      this.identifier.add(t);
298      return this;
299    }
300
301    /**
302     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
303     */
304    public Identifier getIdentifierFirstRep() { 
305      if (getIdentifier().isEmpty()) {
306        addIdentifier();
307      }
308      return getIdentifier().get(0);
309    }
310
311    /**
312     * @return {@link #version} (The identifier that is used to identify this version of the evidence when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
313     */
314    public StringType getVersionElement() { 
315      if (this.version == null)
316        if (Configuration.errorOnAutoCreate())
317          throw new Error("Attempt to auto-create Evidence.version");
318        else if (Configuration.doAutoCreate())
319          this.version = new StringType(); // bb
320      return this.version;
321    }
322
323    public boolean hasVersionElement() { 
324      return this.version != null && !this.version.isEmpty();
325    }
326
327    public boolean hasVersion() { 
328      return this.version != null && !this.version.isEmpty();
329    }
330
331    /**
332     * @param value {@link #version} (The identifier that is used to identify this version of the evidence when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
333     */
334    public Evidence setVersionElement(StringType value) { 
335      this.version = value;
336      return this;
337    }
338
339    /**
340     * @return The identifier that is used to identify this version of the evidence when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.
341     */
342    public String getVersion() { 
343      return this.version == null ? null : this.version.getValue();
344    }
345
346    /**
347     * @param value The identifier that is used to identify this version of the evidence when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.
348     */
349    public Evidence setVersion(String value) { 
350      if (Utilities.noString(value))
351        this.version = null;
352      else {
353        if (this.version == null)
354          this.version = new StringType();
355        this.version.setValue(value);
356      }
357      return this;
358    }
359
360    /**
361     * @return {@link #name} (A natural language name identifying the evidence. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
362     */
363    public StringType getNameElement() { 
364      if (this.name == null)
365        if (Configuration.errorOnAutoCreate())
366          throw new Error("Attempt to auto-create Evidence.name");
367        else if (Configuration.doAutoCreate())
368          this.name = new StringType(); // bb
369      return this.name;
370    }
371
372    public boolean hasNameElement() { 
373      return this.name != null && !this.name.isEmpty();
374    }
375
376    public boolean hasName() { 
377      return this.name != null && !this.name.isEmpty();
378    }
379
380    /**
381     * @param value {@link #name} (A natural language name identifying the evidence. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
382     */
383    public Evidence setNameElement(StringType value) { 
384      this.name = value;
385      return this;
386    }
387
388    /**
389     * @return A natural language name identifying the evidence. This name should be usable as an identifier for the module by machine processing applications such as code generation.
390     */
391    public String getName() { 
392      return this.name == null ? null : this.name.getValue();
393    }
394
395    /**
396     * @param value A natural language name identifying the evidence. This name should be usable as an identifier for the module by machine processing applications such as code generation.
397     */
398    public Evidence setName(String value) { 
399      if (Utilities.noString(value))
400        this.name = null;
401      else {
402        if (this.name == null)
403          this.name = new StringType();
404        this.name.setValue(value);
405      }
406      return this;
407    }
408
409    /**
410     * @return {@link #title} (A short, descriptive, user-friendly title for the evidence.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
411     */
412    public StringType getTitleElement() { 
413      if (this.title == null)
414        if (Configuration.errorOnAutoCreate())
415          throw new Error("Attempt to auto-create Evidence.title");
416        else if (Configuration.doAutoCreate())
417          this.title = new StringType(); // bb
418      return this.title;
419    }
420
421    public boolean hasTitleElement() { 
422      return this.title != null && !this.title.isEmpty();
423    }
424
425    public boolean hasTitle() { 
426      return this.title != null && !this.title.isEmpty();
427    }
428
429    /**
430     * @param value {@link #title} (A short, descriptive, user-friendly title for the evidence.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
431     */
432    public Evidence setTitleElement(StringType value) { 
433      this.title = value;
434      return this;
435    }
436
437    /**
438     * @return A short, descriptive, user-friendly title for the evidence.
439     */
440    public String getTitle() { 
441      return this.title == null ? null : this.title.getValue();
442    }
443
444    /**
445     * @param value A short, descriptive, user-friendly title for the evidence.
446     */
447    public Evidence setTitle(String value) { 
448      if (Utilities.noString(value))
449        this.title = null;
450      else {
451        if (this.title == null)
452          this.title = new StringType();
453        this.title.setValue(value);
454      }
455      return this;
456    }
457
458    /**
459     * @return {@link #shortTitle} (The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.). This is the underlying object with id, value and extensions. The accessor "getShortTitle" gives direct access to the value
460     */
461    public StringType getShortTitleElement() { 
462      if (this.shortTitle == null)
463        if (Configuration.errorOnAutoCreate())
464          throw new Error("Attempt to auto-create Evidence.shortTitle");
465        else if (Configuration.doAutoCreate())
466          this.shortTitle = new StringType(); // bb
467      return this.shortTitle;
468    }
469
470    public boolean hasShortTitleElement() { 
471      return this.shortTitle != null && !this.shortTitle.isEmpty();
472    }
473
474    public boolean hasShortTitle() { 
475      return this.shortTitle != null && !this.shortTitle.isEmpty();
476    }
477
478    /**
479     * @param value {@link #shortTitle} (The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.). This is the underlying object with id, value and extensions. The accessor "getShortTitle" gives direct access to the value
480     */
481    public Evidence setShortTitleElement(StringType value) { 
482      this.shortTitle = value;
483      return this;
484    }
485
486    /**
487     * @return The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.
488     */
489    public String getShortTitle() { 
490      return this.shortTitle == null ? null : this.shortTitle.getValue();
491    }
492
493    /**
494     * @param value The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.
495     */
496    public Evidence setShortTitle(String value) { 
497      if (Utilities.noString(value))
498        this.shortTitle = null;
499      else {
500        if (this.shortTitle == null)
501          this.shortTitle = new StringType();
502        this.shortTitle.setValue(value);
503      }
504      return this;
505    }
506
507    /**
508     * @return {@link #subtitle} (An explanatory or alternate title for the Evidence giving additional information about its content.). This is the underlying object with id, value and extensions. The accessor "getSubtitle" gives direct access to the value
509     */
510    public StringType getSubtitleElement() { 
511      if (this.subtitle == null)
512        if (Configuration.errorOnAutoCreate())
513          throw new Error("Attempt to auto-create Evidence.subtitle");
514        else if (Configuration.doAutoCreate())
515          this.subtitle = new StringType(); // bb
516      return this.subtitle;
517    }
518
519    public boolean hasSubtitleElement() { 
520      return this.subtitle != null && !this.subtitle.isEmpty();
521    }
522
523    public boolean hasSubtitle() { 
524      return this.subtitle != null && !this.subtitle.isEmpty();
525    }
526
527    /**
528     * @param value {@link #subtitle} (An explanatory or alternate title for the Evidence giving additional information about its content.). This is the underlying object with id, value and extensions. The accessor "getSubtitle" gives direct access to the value
529     */
530    public Evidence setSubtitleElement(StringType value) { 
531      this.subtitle = value;
532      return this;
533    }
534
535    /**
536     * @return An explanatory or alternate title for the Evidence giving additional information about its content.
537     */
538    public String getSubtitle() { 
539      return this.subtitle == null ? null : this.subtitle.getValue();
540    }
541
542    /**
543     * @param value An explanatory or alternate title for the Evidence giving additional information about its content.
544     */
545    public Evidence setSubtitle(String value) { 
546      if (Utilities.noString(value))
547        this.subtitle = null;
548      else {
549        if (this.subtitle == null)
550          this.subtitle = new StringType();
551        this.subtitle.setValue(value);
552      }
553      return this;
554    }
555
556    /**
557     * @return {@link #status} (The status of this evidence. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
558     */
559    public Enumeration<PublicationStatus> getStatusElement() { 
560      if (this.status == null)
561        if (Configuration.errorOnAutoCreate())
562          throw new Error("Attempt to auto-create Evidence.status");
563        else if (Configuration.doAutoCreate())
564          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
565      return this.status;
566    }
567
568    public boolean hasStatusElement() { 
569      return this.status != null && !this.status.isEmpty();
570    }
571
572    public boolean hasStatus() { 
573      return this.status != null && !this.status.isEmpty();
574    }
575
576    /**
577     * @param value {@link #status} (The status of this evidence. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
578     */
579    public Evidence setStatusElement(Enumeration<PublicationStatus> value) { 
580      this.status = value;
581      return this;
582    }
583
584    /**
585     * @return The status of this evidence. Enables tracking the life-cycle of the content.
586     */
587    public PublicationStatus getStatus() { 
588      return this.status == null ? null : this.status.getValue();
589    }
590
591    /**
592     * @param value The status of this evidence. Enables tracking the life-cycle of the content.
593     */
594    public Evidence setStatus(PublicationStatus value) { 
595        if (this.status == null)
596          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
597        this.status.setValue(value);
598      return this;
599    }
600
601    /**
602     * @return {@link #date} (The date  (and optionally time) when the evidence was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the evidence changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
603     */
604    public DateTimeType getDateElement() { 
605      if (this.date == null)
606        if (Configuration.errorOnAutoCreate())
607          throw new Error("Attempt to auto-create Evidence.date");
608        else if (Configuration.doAutoCreate())
609          this.date = new DateTimeType(); // bb
610      return this.date;
611    }
612
613    public boolean hasDateElement() { 
614      return this.date != null && !this.date.isEmpty();
615    }
616
617    public boolean hasDate() { 
618      return this.date != null && !this.date.isEmpty();
619    }
620
621    /**
622     * @param value {@link #date} (The date  (and optionally time) when the evidence was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the evidence changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
623     */
624    public Evidence setDateElement(DateTimeType value) { 
625      this.date = value;
626      return this;
627    }
628
629    /**
630     * @return The date  (and optionally time) when the evidence was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the evidence changes.
631     */
632    public Date getDate() { 
633      return this.date == null ? null : this.date.getValue();
634    }
635
636    /**
637     * @param value The date  (and optionally time) when the evidence was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the evidence changes.
638     */
639    public Evidence setDate(Date value) { 
640      if (value == null)
641        this.date = null;
642      else {
643        if (this.date == null)
644          this.date = new DateTimeType();
645        this.date.setValue(value);
646      }
647      return this;
648    }
649
650    /**
651     * @return {@link #publisher} (The name of the organization or individual that published the evidence.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
652     */
653    public StringType getPublisherElement() { 
654      if (this.publisher == null)
655        if (Configuration.errorOnAutoCreate())
656          throw new Error("Attempt to auto-create Evidence.publisher");
657        else if (Configuration.doAutoCreate())
658          this.publisher = new StringType(); // bb
659      return this.publisher;
660    }
661
662    public boolean hasPublisherElement() { 
663      return this.publisher != null && !this.publisher.isEmpty();
664    }
665
666    public boolean hasPublisher() { 
667      return this.publisher != null && !this.publisher.isEmpty();
668    }
669
670    /**
671     * @param value {@link #publisher} (The name of the organization or individual that published the evidence.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
672     */
673    public Evidence setPublisherElement(StringType value) { 
674      this.publisher = value;
675      return this;
676    }
677
678    /**
679     * @return The name of the organization or individual that published the evidence.
680     */
681    public String getPublisher() { 
682      return this.publisher == null ? null : this.publisher.getValue();
683    }
684
685    /**
686     * @param value The name of the organization or individual that published the evidence.
687     */
688    public Evidence setPublisher(String value) { 
689      if (Utilities.noString(value))
690        this.publisher = null;
691      else {
692        if (this.publisher == null)
693          this.publisher = new StringType();
694        this.publisher.setValue(value);
695      }
696      return this;
697    }
698
699    /**
700     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
701     */
702    public List<ContactDetail> getContact() { 
703      if (this.contact == null)
704        this.contact = new ArrayList<ContactDetail>();
705      return this.contact;
706    }
707
708    /**
709     * @return Returns a reference to <code>this</code> for easy method chaining
710     */
711    public Evidence setContact(List<ContactDetail> theContact) { 
712      this.contact = theContact;
713      return this;
714    }
715
716    public boolean hasContact() { 
717      if (this.contact == null)
718        return false;
719      for (ContactDetail item : this.contact)
720        if (!item.isEmpty())
721          return true;
722      return false;
723    }
724
725    public ContactDetail addContact() { //3
726      ContactDetail t = new ContactDetail();
727      if (this.contact == null)
728        this.contact = new ArrayList<ContactDetail>();
729      this.contact.add(t);
730      return t;
731    }
732
733    public Evidence addContact(ContactDetail t) { //3
734      if (t == null)
735        return this;
736      if (this.contact == null)
737        this.contact = new ArrayList<ContactDetail>();
738      this.contact.add(t);
739      return this;
740    }
741
742    /**
743     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
744     */
745    public ContactDetail getContactFirstRep() { 
746      if (getContact().isEmpty()) {
747        addContact();
748      }
749      return getContact().get(0);
750    }
751
752    /**
753     * @return {@link #description} (A free text natural language description of the evidence from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
754     */
755    public MarkdownType getDescriptionElement() { 
756      if (this.description == null)
757        if (Configuration.errorOnAutoCreate())
758          throw new Error("Attempt to auto-create Evidence.description");
759        else if (Configuration.doAutoCreate())
760          this.description = new MarkdownType(); // bb
761      return this.description;
762    }
763
764    public boolean hasDescriptionElement() { 
765      return this.description != null && !this.description.isEmpty();
766    }
767
768    public boolean hasDescription() { 
769      return this.description != null && !this.description.isEmpty();
770    }
771
772    /**
773     * @param value {@link #description} (A free text natural language description of the evidence from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
774     */
775    public Evidence setDescriptionElement(MarkdownType value) { 
776      this.description = value;
777      return this;
778    }
779
780    /**
781     * @return A free text natural language description of the evidence from a consumer's perspective.
782     */
783    public String getDescription() { 
784      return this.description == null ? null : this.description.getValue();
785    }
786
787    /**
788     * @param value A free text natural language description of the evidence from a consumer's perspective.
789     */
790    public Evidence setDescription(String value) { 
791      if (value == null)
792        this.description = null;
793      else {
794        if (this.description == null)
795          this.description = new MarkdownType();
796        this.description.setValue(value);
797      }
798      return this;
799    }
800
801    /**
802     * @return {@link #note} (A human-readable string to clarify or explain concepts about the resource.)
803     */
804    public List<Annotation> getNote() { 
805      if (this.note == null)
806        this.note = new ArrayList<Annotation>();
807      return this.note;
808    }
809
810    /**
811     * @return Returns a reference to <code>this</code> for easy method chaining
812     */
813    public Evidence setNote(List<Annotation> theNote) { 
814      this.note = theNote;
815      return this;
816    }
817
818    public boolean hasNote() { 
819      if (this.note == null)
820        return false;
821      for (Annotation item : this.note)
822        if (!item.isEmpty())
823          return true;
824      return false;
825    }
826
827    public Annotation addNote() { //3
828      Annotation t = new Annotation();
829      if (this.note == null)
830        this.note = new ArrayList<Annotation>();
831      this.note.add(t);
832      return t;
833    }
834
835    public Evidence addNote(Annotation t) { //3
836      if (t == null)
837        return this;
838      if (this.note == null)
839        this.note = new ArrayList<Annotation>();
840      this.note.add(t);
841      return this;
842    }
843
844    /**
845     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
846     */
847    public Annotation getNoteFirstRep() { 
848      if (getNote().isEmpty()) {
849        addNote();
850      }
851      return getNote().get(0);
852    }
853
854    /**
855     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate evidence instances.)
856     */
857    public List<UsageContext> getUseContext() { 
858      if (this.useContext == null)
859        this.useContext = new ArrayList<UsageContext>();
860      return this.useContext;
861    }
862
863    /**
864     * @return Returns a reference to <code>this</code> for easy method chaining
865     */
866    public Evidence setUseContext(List<UsageContext> theUseContext) { 
867      this.useContext = theUseContext;
868      return this;
869    }
870
871    public boolean hasUseContext() { 
872      if (this.useContext == null)
873        return false;
874      for (UsageContext item : this.useContext)
875        if (!item.isEmpty())
876          return true;
877      return false;
878    }
879
880    public UsageContext addUseContext() { //3
881      UsageContext t = new UsageContext();
882      if (this.useContext == null)
883        this.useContext = new ArrayList<UsageContext>();
884      this.useContext.add(t);
885      return t;
886    }
887
888    public Evidence addUseContext(UsageContext t) { //3
889      if (t == null)
890        return this;
891      if (this.useContext == null)
892        this.useContext = new ArrayList<UsageContext>();
893      this.useContext.add(t);
894      return this;
895    }
896
897    /**
898     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
899     */
900    public UsageContext getUseContextFirstRep() { 
901      if (getUseContext().isEmpty()) {
902        addUseContext();
903      }
904      return getUseContext().get(0);
905    }
906
907    /**
908     * @return {@link #jurisdiction} (A legal or geographic region in which the evidence is intended to be used.)
909     */
910    public List<CodeableConcept> getJurisdiction() { 
911      if (this.jurisdiction == null)
912        this.jurisdiction = new ArrayList<CodeableConcept>();
913      return this.jurisdiction;
914    }
915
916    /**
917     * @return Returns a reference to <code>this</code> for easy method chaining
918     */
919    public Evidence setJurisdiction(List<CodeableConcept> theJurisdiction) { 
920      this.jurisdiction = theJurisdiction;
921      return this;
922    }
923
924    public boolean hasJurisdiction() { 
925      if (this.jurisdiction == null)
926        return false;
927      for (CodeableConcept item : this.jurisdiction)
928        if (!item.isEmpty())
929          return true;
930      return false;
931    }
932
933    public CodeableConcept addJurisdiction() { //3
934      CodeableConcept t = new CodeableConcept();
935      if (this.jurisdiction == null)
936        this.jurisdiction = new ArrayList<CodeableConcept>();
937      this.jurisdiction.add(t);
938      return t;
939    }
940
941    public Evidence addJurisdiction(CodeableConcept t) { //3
942      if (t == null)
943        return this;
944      if (this.jurisdiction == null)
945        this.jurisdiction = new ArrayList<CodeableConcept>();
946      this.jurisdiction.add(t);
947      return this;
948    }
949
950    /**
951     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
952     */
953    public CodeableConcept getJurisdictionFirstRep() { 
954      if (getJurisdiction().isEmpty()) {
955        addJurisdiction();
956      }
957      return getJurisdiction().get(0);
958    }
959
960    /**
961     * @return {@link #copyright} (A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
962     */
963    public MarkdownType getCopyrightElement() { 
964      if (this.copyright == null)
965        if (Configuration.errorOnAutoCreate())
966          throw new Error("Attempt to auto-create Evidence.copyright");
967        else if (Configuration.doAutoCreate())
968          this.copyright = new MarkdownType(); // bb
969      return this.copyright;
970    }
971
972    public boolean hasCopyrightElement() { 
973      return this.copyright != null && !this.copyright.isEmpty();
974    }
975
976    public boolean hasCopyright() { 
977      return this.copyright != null && !this.copyright.isEmpty();
978    }
979
980    /**
981     * @param value {@link #copyright} (A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
982     */
983    public Evidence setCopyrightElement(MarkdownType value) { 
984      this.copyright = value;
985      return this;
986    }
987
988    /**
989     * @return A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence.
990     */
991    public String getCopyright() { 
992      return this.copyright == null ? null : this.copyright.getValue();
993    }
994
995    /**
996     * @param value A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence.
997     */
998    public Evidence setCopyright(String value) { 
999      if (value == null)
1000        this.copyright = null;
1001      else {
1002        if (this.copyright == null)
1003          this.copyright = new MarkdownType();
1004        this.copyright.setValue(value);
1005      }
1006      return this;
1007    }
1008
1009    /**
1010     * @return {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
1011     */
1012    public DateType getApprovalDateElement() { 
1013      if (this.approvalDate == null)
1014        if (Configuration.errorOnAutoCreate())
1015          throw new Error("Attempt to auto-create Evidence.approvalDate");
1016        else if (Configuration.doAutoCreate())
1017          this.approvalDate = new DateType(); // bb
1018      return this.approvalDate;
1019    }
1020
1021    public boolean hasApprovalDateElement() { 
1022      return this.approvalDate != null && !this.approvalDate.isEmpty();
1023    }
1024
1025    public boolean hasApprovalDate() { 
1026      return this.approvalDate != null && !this.approvalDate.isEmpty();
1027    }
1028
1029    /**
1030     * @param value {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
1031     */
1032    public Evidence setApprovalDateElement(DateType value) { 
1033      this.approvalDate = value;
1034      return this;
1035    }
1036
1037    /**
1038     * @return The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
1039     */
1040    public Date getApprovalDate() { 
1041      return this.approvalDate == null ? null : this.approvalDate.getValue();
1042    }
1043
1044    /**
1045     * @param value The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
1046     */
1047    public Evidence setApprovalDate(Date value) { 
1048      if (value == null)
1049        this.approvalDate = null;
1050      else {
1051        if (this.approvalDate == null)
1052          this.approvalDate = new DateType();
1053        this.approvalDate.setValue(value);
1054      }
1055      return this;
1056    }
1057
1058    /**
1059     * @return {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
1060     */
1061    public DateType getLastReviewDateElement() { 
1062      if (this.lastReviewDate == null)
1063        if (Configuration.errorOnAutoCreate())
1064          throw new Error("Attempt to auto-create Evidence.lastReviewDate");
1065        else if (Configuration.doAutoCreate())
1066          this.lastReviewDate = new DateType(); // bb
1067      return this.lastReviewDate;
1068    }
1069
1070    public boolean hasLastReviewDateElement() { 
1071      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
1072    }
1073
1074    public boolean hasLastReviewDate() { 
1075      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
1076    }
1077
1078    /**
1079     * @param value {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
1080     */
1081    public Evidence setLastReviewDateElement(DateType value) { 
1082      this.lastReviewDate = value;
1083      return this;
1084    }
1085
1086    /**
1087     * @return The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
1088     */
1089    public Date getLastReviewDate() { 
1090      return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
1091    }
1092
1093    /**
1094     * @param value The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
1095     */
1096    public Evidence setLastReviewDate(Date value) { 
1097      if (value == null)
1098        this.lastReviewDate = null;
1099      else {
1100        if (this.lastReviewDate == null)
1101          this.lastReviewDate = new DateType();
1102        this.lastReviewDate.setValue(value);
1103      }
1104      return this;
1105    }
1106
1107    /**
1108     * @return {@link #effectivePeriod} (The period during which the evidence content was or is planned to be in active use.)
1109     */
1110    public Period getEffectivePeriod() { 
1111      if (this.effectivePeriod == null)
1112        if (Configuration.errorOnAutoCreate())
1113          throw new Error("Attempt to auto-create Evidence.effectivePeriod");
1114        else if (Configuration.doAutoCreate())
1115          this.effectivePeriod = new Period(); // cc
1116      return this.effectivePeriod;
1117    }
1118
1119    public boolean hasEffectivePeriod() { 
1120      return this.effectivePeriod != null && !this.effectivePeriod.isEmpty();
1121    }
1122
1123    /**
1124     * @param value {@link #effectivePeriod} (The period during which the evidence content was or is planned to be in active use.)
1125     */
1126    public Evidence setEffectivePeriod(Period value) { 
1127      this.effectivePeriod = value;
1128      return this;
1129    }
1130
1131    /**
1132     * @return {@link #topic} (Descriptive topics related to the content of the Evidence. Topics provide a high-level categorization grouping types of Evidences that can be useful for filtering and searching.)
1133     */
1134    public List<CodeableConcept> getTopic() { 
1135      if (this.topic == null)
1136        this.topic = new ArrayList<CodeableConcept>();
1137      return this.topic;
1138    }
1139
1140    /**
1141     * @return Returns a reference to <code>this</code> for easy method chaining
1142     */
1143    public Evidence setTopic(List<CodeableConcept> theTopic) { 
1144      this.topic = theTopic;
1145      return this;
1146    }
1147
1148    public boolean hasTopic() { 
1149      if (this.topic == null)
1150        return false;
1151      for (CodeableConcept item : this.topic)
1152        if (!item.isEmpty())
1153          return true;
1154      return false;
1155    }
1156
1157    public CodeableConcept addTopic() { //3
1158      CodeableConcept t = new CodeableConcept();
1159      if (this.topic == null)
1160        this.topic = new ArrayList<CodeableConcept>();
1161      this.topic.add(t);
1162      return t;
1163    }
1164
1165    public Evidence addTopic(CodeableConcept t) { //3
1166      if (t == null)
1167        return this;
1168      if (this.topic == null)
1169        this.topic = new ArrayList<CodeableConcept>();
1170      this.topic.add(t);
1171      return this;
1172    }
1173
1174    /**
1175     * @return The first repetition of repeating field {@link #topic}, creating it if it does not already exist
1176     */
1177    public CodeableConcept getTopicFirstRep() { 
1178      if (getTopic().isEmpty()) {
1179        addTopic();
1180      }
1181      return getTopic().get(0);
1182    }
1183
1184    /**
1185     * @return {@link #author} (An individiual or organization primarily involved in the creation and maintenance of the content.)
1186     */
1187    public List<ContactDetail> getAuthor() { 
1188      if (this.author == null)
1189        this.author = new ArrayList<ContactDetail>();
1190      return this.author;
1191    }
1192
1193    /**
1194     * @return Returns a reference to <code>this</code> for easy method chaining
1195     */
1196    public Evidence setAuthor(List<ContactDetail> theAuthor) { 
1197      this.author = theAuthor;
1198      return this;
1199    }
1200
1201    public boolean hasAuthor() { 
1202      if (this.author == null)
1203        return false;
1204      for (ContactDetail item : this.author)
1205        if (!item.isEmpty())
1206          return true;
1207      return false;
1208    }
1209
1210    public ContactDetail addAuthor() { //3
1211      ContactDetail t = new ContactDetail();
1212      if (this.author == null)
1213        this.author = new ArrayList<ContactDetail>();
1214      this.author.add(t);
1215      return t;
1216    }
1217
1218    public Evidence addAuthor(ContactDetail t) { //3
1219      if (t == null)
1220        return this;
1221      if (this.author == null)
1222        this.author = new ArrayList<ContactDetail>();
1223      this.author.add(t);
1224      return this;
1225    }
1226
1227    /**
1228     * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist
1229     */
1230    public ContactDetail getAuthorFirstRep() { 
1231      if (getAuthor().isEmpty()) {
1232        addAuthor();
1233      }
1234      return getAuthor().get(0);
1235    }
1236
1237    /**
1238     * @return {@link #editor} (An individual or organization primarily responsible for internal coherence of the content.)
1239     */
1240    public List<ContactDetail> getEditor() { 
1241      if (this.editor == null)
1242        this.editor = new ArrayList<ContactDetail>();
1243      return this.editor;
1244    }
1245
1246    /**
1247     * @return Returns a reference to <code>this</code> for easy method chaining
1248     */
1249    public Evidence setEditor(List<ContactDetail> theEditor) { 
1250      this.editor = theEditor;
1251      return this;
1252    }
1253
1254    public boolean hasEditor() { 
1255      if (this.editor == null)
1256        return false;
1257      for (ContactDetail item : this.editor)
1258        if (!item.isEmpty())
1259          return true;
1260      return false;
1261    }
1262
1263    public ContactDetail addEditor() { //3
1264      ContactDetail t = new ContactDetail();
1265      if (this.editor == null)
1266        this.editor = new ArrayList<ContactDetail>();
1267      this.editor.add(t);
1268      return t;
1269    }
1270
1271    public Evidence addEditor(ContactDetail t) { //3
1272      if (t == null)
1273        return this;
1274      if (this.editor == null)
1275        this.editor = new ArrayList<ContactDetail>();
1276      this.editor.add(t);
1277      return this;
1278    }
1279
1280    /**
1281     * @return The first repetition of repeating field {@link #editor}, creating it if it does not already exist
1282     */
1283    public ContactDetail getEditorFirstRep() { 
1284      if (getEditor().isEmpty()) {
1285        addEditor();
1286      }
1287      return getEditor().get(0);
1288    }
1289
1290    /**
1291     * @return {@link #reviewer} (An individual or organization primarily responsible for review of some aspect of the content.)
1292     */
1293    public List<ContactDetail> getReviewer() { 
1294      if (this.reviewer == null)
1295        this.reviewer = new ArrayList<ContactDetail>();
1296      return this.reviewer;
1297    }
1298
1299    /**
1300     * @return Returns a reference to <code>this</code> for easy method chaining
1301     */
1302    public Evidence setReviewer(List<ContactDetail> theReviewer) { 
1303      this.reviewer = theReviewer;
1304      return this;
1305    }
1306
1307    public boolean hasReviewer() { 
1308      if (this.reviewer == null)
1309        return false;
1310      for (ContactDetail item : this.reviewer)
1311        if (!item.isEmpty())
1312          return true;
1313      return false;
1314    }
1315
1316    public ContactDetail addReviewer() { //3
1317      ContactDetail t = new ContactDetail();
1318      if (this.reviewer == null)
1319        this.reviewer = new ArrayList<ContactDetail>();
1320      this.reviewer.add(t);
1321      return t;
1322    }
1323
1324    public Evidence addReviewer(ContactDetail t) { //3
1325      if (t == null)
1326        return this;
1327      if (this.reviewer == null)
1328        this.reviewer = new ArrayList<ContactDetail>();
1329      this.reviewer.add(t);
1330      return this;
1331    }
1332
1333    /**
1334     * @return The first repetition of repeating field {@link #reviewer}, creating it if it does not already exist
1335     */
1336    public ContactDetail getReviewerFirstRep() { 
1337      if (getReviewer().isEmpty()) {
1338        addReviewer();
1339      }
1340      return getReviewer().get(0);
1341    }
1342
1343    /**
1344     * @return {@link #endorser} (An individual or organization responsible for officially endorsing the content for use in some setting.)
1345     */
1346    public List<ContactDetail> getEndorser() { 
1347      if (this.endorser == null)
1348        this.endorser = new ArrayList<ContactDetail>();
1349      return this.endorser;
1350    }
1351
1352    /**
1353     * @return Returns a reference to <code>this</code> for easy method chaining
1354     */
1355    public Evidence setEndorser(List<ContactDetail> theEndorser) { 
1356      this.endorser = theEndorser;
1357      return this;
1358    }
1359
1360    public boolean hasEndorser() { 
1361      if (this.endorser == null)
1362        return false;
1363      for (ContactDetail item : this.endorser)
1364        if (!item.isEmpty())
1365          return true;
1366      return false;
1367    }
1368
1369    public ContactDetail addEndorser() { //3
1370      ContactDetail t = new ContactDetail();
1371      if (this.endorser == null)
1372        this.endorser = new ArrayList<ContactDetail>();
1373      this.endorser.add(t);
1374      return t;
1375    }
1376
1377    public Evidence addEndorser(ContactDetail t) { //3
1378      if (t == null)
1379        return this;
1380      if (this.endorser == null)
1381        this.endorser = new ArrayList<ContactDetail>();
1382      this.endorser.add(t);
1383      return this;
1384    }
1385
1386    /**
1387     * @return The first repetition of repeating field {@link #endorser}, creating it if it does not already exist
1388     */
1389    public ContactDetail getEndorserFirstRep() { 
1390      if (getEndorser().isEmpty()) {
1391        addEndorser();
1392      }
1393      return getEndorser().get(0);
1394    }
1395
1396    /**
1397     * @return {@link #relatedArtifact} (Related artifacts such as additional documentation, justification, or bibliographic references.)
1398     */
1399    public List<RelatedArtifact> getRelatedArtifact() { 
1400      if (this.relatedArtifact == null)
1401        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1402      return this.relatedArtifact;
1403    }
1404
1405    /**
1406     * @return Returns a reference to <code>this</code> for easy method chaining
1407     */
1408    public Evidence setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
1409      this.relatedArtifact = theRelatedArtifact;
1410      return this;
1411    }
1412
1413    public boolean hasRelatedArtifact() { 
1414      if (this.relatedArtifact == null)
1415        return false;
1416      for (RelatedArtifact item : this.relatedArtifact)
1417        if (!item.isEmpty())
1418          return true;
1419      return false;
1420    }
1421
1422    public RelatedArtifact addRelatedArtifact() { //3
1423      RelatedArtifact t = new RelatedArtifact();
1424      if (this.relatedArtifact == null)
1425        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1426      this.relatedArtifact.add(t);
1427      return t;
1428    }
1429
1430    public Evidence addRelatedArtifact(RelatedArtifact t) { //3
1431      if (t == null)
1432        return this;
1433      if (this.relatedArtifact == null)
1434        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1435      this.relatedArtifact.add(t);
1436      return this;
1437    }
1438
1439    /**
1440     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist
1441     */
1442    public RelatedArtifact getRelatedArtifactFirstRep() { 
1443      if (getRelatedArtifact().isEmpty()) {
1444        addRelatedArtifact();
1445      }
1446      return getRelatedArtifact().get(0);
1447    }
1448
1449    /**
1450     * @return {@link #exposureBackground} (A reference to a EvidenceVariable resource that defines the population for the research.)
1451     */
1452    public Reference getExposureBackground() { 
1453      if (this.exposureBackground == null)
1454        if (Configuration.errorOnAutoCreate())
1455          throw new Error("Attempt to auto-create Evidence.exposureBackground");
1456        else if (Configuration.doAutoCreate())
1457          this.exposureBackground = new Reference(); // cc
1458      return this.exposureBackground;
1459    }
1460
1461    public boolean hasExposureBackground() { 
1462      return this.exposureBackground != null && !this.exposureBackground.isEmpty();
1463    }
1464
1465    /**
1466     * @param value {@link #exposureBackground} (A reference to a EvidenceVariable resource that defines the population for the research.)
1467     */
1468    public Evidence setExposureBackground(Reference value) { 
1469      this.exposureBackground = value;
1470      return this;
1471    }
1472
1473    /**
1474     * @return {@link #exposureBackground} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (A reference to a EvidenceVariable resource that defines the population for the research.)
1475     */
1476    public EvidenceVariable getExposureBackgroundTarget() { 
1477      if (this.exposureBackgroundTarget == null)
1478        if (Configuration.errorOnAutoCreate())
1479          throw new Error("Attempt to auto-create Evidence.exposureBackground");
1480        else if (Configuration.doAutoCreate())
1481          this.exposureBackgroundTarget = new EvidenceVariable(); // aa
1482      return this.exposureBackgroundTarget;
1483    }
1484
1485    /**
1486     * @param value {@link #exposureBackground} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (A reference to a EvidenceVariable resource that defines the population for the research.)
1487     */
1488    public Evidence setExposureBackgroundTarget(EvidenceVariable value) { 
1489      this.exposureBackgroundTarget = value;
1490      return this;
1491    }
1492
1493    /**
1494     * @return {@link #exposureVariant} (A reference to a EvidenceVariable resource that defines the exposure for the research.)
1495     */
1496    public List<Reference> getExposureVariant() { 
1497      if (this.exposureVariant == null)
1498        this.exposureVariant = new ArrayList<Reference>();
1499      return this.exposureVariant;
1500    }
1501
1502    /**
1503     * @return Returns a reference to <code>this</code> for easy method chaining
1504     */
1505    public Evidence setExposureVariant(List<Reference> theExposureVariant) { 
1506      this.exposureVariant = theExposureVariant;
1507      return this;
1508    }
1509
1510    public boolean hasExposureVariant() { 
1511      if (this.exposureVariant == null)
1512        return false;
1513      for (Reference item : this.exposureVariant)
1514        if (!item.isEmpty())
1515          return true;
1516      return false;
1517    }
1518
1519    public Reference addExposureVariant() { //3
1520      Reference t = new Reference();
1521      if (this.exposureVariant == null)
1522        this.exposureVariant = new ArrayList<Reference>();
1523      this.exposureVariant.add(t);
1524      return t;
1525    }
1526
1527    public Evidence addExposureVariant(Reference t) { //3
1528      if (t == null)
1529        return this;
1530      if (this.exposureVariant == null)
1531        this.exposureVariant = new ArrayList<Reference>();
1532      this.exposureVariant.add(t);
1533      return this;
1534    }
1535
1536    /**
1537     * @return The first repetition of repeating field {@link #exposureVariant}, creating it if it does not already exist
1538     */
1539    public Reference getExposureVariantFirstRep() { 
1540      if (getExposureVariant().isEmpty()) {
1541        addExposureVariant();
1542      }
1543      return getExposureVariant().get(0);
1544    }
1545
1546    /**
1547     * @deprecated Use Reference#setResource(IBaseResource) instead
1548     */
1549    @Deprecated
1550    public List<EvidenceVariable> getExposureVariantTarget() { 
1551      if (this.exposureVariantTarget == null)
1552        this.exposureVariantTarget = new ArrayList<EvidenceVariable>();
1553      return this.exposureVariantTarget;
1554    }
1555
1556    /**
1557     * @deprecated Use Reference#setResource(IBaseResource) instead
1558     */
1559    @Deprecated
1560    public EvidenceVariable addExposureVariantTarget() { 
1561      EvidenceVariable r = new EvidenceVariable();
1562      if (this.exposureVariantTarget == null)
1563        this.exposureVariantTarget = new ArrayList<EvidenceVariable>();
1564      this.exposureVariantTarget.add(r);
1565      return r;
1566    }
1567
1568    /**
1569     * @return {@link #outcome} (A reference to a EvidenceVariable resomece that defines the outcome for the research.)
1570     */
1571    public List<Reference> getOutcome() { 
1572      if (this.outcome == null)
1573        this.outcome = new ArrayList<Reference>();
1574      return this.outcome;
1575    }
1576
1577    /**
1578     * @return Returns a reference to <code>this</code> for easy method chaining
1579     */
1580    public Evidence setOutcome(List<Reference> theOutcome) { 
1581      this.outcome = theOutcome;
1582      return this;
1583    }
1584
1585    public boolean hasOutcome() { 
1586      if (this.outcome == null)
1587        return false;
1588      for (Reference item : this.outcome)
1589        if (!item.isEmpty())
1590          return true;
1591      return false;
1592    }
1593
1594    public Reference addOutcome() { //3
1595      Reference t = new Reference();
1596      if (this.outcome == null)
1597        this.outcome = new ArrayList<Reference>();
1598      this.outcome.add(t);
1599      return t;
1600    }
1601
1602    public Evidence addOutcome(Reference t) { //3
1603      if (t == null)
1604        return this;
1605      if (this.outcome == null)
1606        this.outcome = new ArrayList<Reference>();
1607      this.outcome.add(t);
1608      return this;
1609    }
1610
1611    /**
1612     * @return The first repetition of repeating field {@link #outcome}, creating it if it does not already exist
1613     */
1614    public Reference getOutcomeFirstRep() { 
1615      if (getOutcome().isEmpty()) {
1616        addOutcome();
1617      }
1618      return getOutcome().get(0);
1619    }
1620
1621    /**
1622     * @deprecated Use Reference#setResource(IBaseResource) instead
1623     */
1624    @Deprecated
1625    public List<EvidenceVariable> getOutcomeTarget() { 
1626      if (this.outcomeTarget == null)
1627        this.outcomeTarget = new ArrayList<EvidenceVariable>();
1628      return this.outcomeTarget;
1629    }
1630
1631    /**
1632     * @deprecated Use Reference#setResource(IBaseResource) instead
1633     */
1634    @Deprecated
1635    public EvidenceVariable addOutcomeTarget() { 
1636      EvidenceVariable r = new EvidenceVariable();
1637      if (this.outcomeTarget == null)
1638        this.outcomeTarget = new ArrayList<EvidenceVariable>();
1639      this.outcomeTarget.add(r);
1640      return r;
1641    }
1642
1643      protected void listChildren(List<Property> children) {
1644        super.listChildren(children);
1645        children.add(new Property("url", "uri", "An absolute URI that is used to identify this evidence when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence is stored on different servers.", 0, 1, url));
1646        children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this evidence when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier));
1647        children.add(new Property("version", "string", "The identifier that is used to identify this version of the evidence when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.", 0, 1, version));
1648        children.add(new Property("name", "string", "A natural language name identifying the evidence. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name));
1649        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the evidence.", 0, 1, title));
1650        children.add(new Property("shortTitle", "string", "The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.", 0, 1, shortTitle));
1651        children.add(new Property("subtitle", "string", "An explanatory or alternate title for the Evidence giving additional information about its content.", 0, 1, subtitle));
1652        children.add(new Property("status", "code", "The status of this evidence. Enables tracking the life-cycle of the content.", 0, 1, status));
1653        children.add(new Property("date", "dateTime", "The date  (and optionally time) when the evidence was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the evidence changes.", 0, 1, date));
1654        children.add(new Property("publisher", "string", "The name of the organization or individual that published the evidence.", 0, 1, publisher));
1655        children.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
1656        children.add(new Property("description", "markdown", "A free text natural language description of the evidence from a consumer's perspective.", 0, 1, description));
1657        children.add(new Property("note", "Annotation", "A human-readable string to clarify or explain concepts about the resource.", 0, java.lang.Integer.MAX_VALUE, note));
1658        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate evidence instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
1659        children.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the evidence is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
1660        children.add(new Property("copyright", "markdown", "A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence.", 0, 1, copyright));
1661        children.add(new Property("approvalDate", "date", "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate));
1662        children.add(new Property("lastReviewDate", "date", "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", 0, 1, lastReviewDate));
1663        children.add(new Property("effectivePeriod", "Period", "The period during which the evidence content was or is planned to be in active use.", 0, 1, effectivePeriod));
1664        children.add(new Property("topic", "CodeableConcept", "Descriptive topics related to the content of the Evidence. Topics provide a high-level categorization grouping types of Evidences that can be useful for filtering and searching.", 0, java.lang.Integer.MAX_VALUE, topic));
1665        children.add(new Property("author", "ContactDetail", "An individiual or organization primarily involved in the creation and maintenance of the content.", 0, java.lang.Integer.MAX_VALUE, author));
1666        children.add(new Property("editor", "ContactDetail", "An individual or organization primarily responsible for internal coherence of the content.", 0, java.lang.Integer.MAX_VALUE, editor));
1667        children.add(new Property("reviewer", "ContactDetail", "An individual or organization primarily responsible for review of some aspect of the content.", 0, java.lang.Integer.MAX_VALUE, reviewer));
1668        children.add(new Property("endorser", "ContactDetail", "An individual or organization responsible for officially endorsing the content for use in some setting.", 0, java.lang.Integer.MAX_VALUE, endorser));
1669        children.add(new Property("relatedArtifact", "RelatedArtifact", "Related artifacts such as additional documentation, justification, or bibliographic references.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact));
1670        children.add(new Property("exposureBackground", "Reference(EvidenceVariable)", "A reference to a EvidenceVariable resource that defines the population for the research.", 0, 1, exposureBackground));
1671        children.add(new Property("exposureVariant", "Reference(EvidenceVariable)", "A reference to a EvidenceVariable resource that defines the exposure for the research.", 0, java.lang.Integer.MAX_VALUE, exposureVariant));
1672        children.add(new Property("outcome", "Reference(EvidenceVariable)", "A reference to a EvidenceVariable resomece that defines the outcome for the research.", 0, java.lang.Integer.MAX_VALUE, outcome));
1673      }
1674
1675      @Override
1676      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1677        switch (_hash) {
1678        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this evidence when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence is stored on different servers.", 0, 1, url);
1679        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify this evidence when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier);
1680        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the evidence when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.", 0, 1, version);
1681        case 3373707: /*name*/  return new Property("name", "string", "A natural language name identifying the evidence. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name);
1682        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the evidence.", 0, 1, title);
1683        case 1555503932: /*shortTitle*/  return new Property("shortTitle", "string", "The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.", 0, 1, shortTitle);
1684        case -2060497896: /*subtitle*/  return new Property("subtitle", "string", "An explanatory or alternate title for the Evidence giving additional information about its content.", 0, 1, subtitle);
1685        case -892481550: /*status*/  return new Property("status", "code", "The status of this evidence. Enables tracking the life-cycle of the content.", 0, 1, status);
1686        case 3076014: /*date*/  return new Property("date", "dateTime", "The date  (and optionally time) when the evidence was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the evidence changes.", 0, 1, date);
1687        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the evidence.", 0, 1, publisher);
1688        case 951526432: /*contact*/  return new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact);
1689        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the evidence from a consumer's perspective.", 0, 1, description);
1690        case 3387378: /*note*/  return new Property("note", "Annotation", "A human-readable string to clarify or explain concepts about the resource.", 0, java.lang.Integer.MAX_VALUE, note);
1691        case -669707736: /*useContext*/  return new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate evidence instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
1692        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the evidence is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
1693        case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence.", 0, 1, copyright);
1694        case 223539345: /*approvalDate*/  return new Property("approvalDate", "date", "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", 0, 1, approvalDate);
1695        case -1687512484: /*lastReviewDate*/  return new Property("lastReviewDate", "date", "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", 0, 1, lastReviewDate);
1696        case -403934648: /*effectivePeriod*/  return new Property("effectivePeriod", "Period", "The period during which the evidence content was or is planned to be in active use.", 0, 1, effectivePeriod);
1697        case 110546223: /*topic*/  return new Property("topic", "CodeableConcept", "Descriptive topics related to the content of the Evidence. Topics provide a high-level categorization grouping types of Evidences that can be useful for filtering and searching.", 0, java.lang.Integer.MAX_VALUE, topic);
1698        case -1406328437: /*author*/  return new Property("author", "ContactDetail", "An individiual or organization primarily involved in the creation and maintenance of the content.", 0, java.lang.Integer.MAX_VALUE, author);
1699        case -1307827859: /*editor*/  return new Property("editor", "ContactDetail", "An individual or organization primarily responsible for internal coherence of the content.", 0, java.lang.Integer.MAX_VALUE, editor);
1700        case -261190139: /*reviewer*/  return new Property("reviewer", "ContactDetail", "An individual or organization primarily responsible for review of some aspect of the content.", 0, java.lang.Integer.MAX_VALUE, reviewer);
1701        case 1740277666: /*endorser*/  return new Property("endorser", "ContactDetail", "An individual or organization responsible for officially endorsing the content for use in some setting.", 0, java.lang.Integer.MAX_VALUE, endorser);
1702        case 666807069: /*relatedArtifact*/  return new Property("relatedArtifact", "RelatedArtifact", "Related artifacts such as additional documentation, justification, or bibliographic references.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact);
1703        case -832155243: /*exposureBackground*/  return new Property("exposureBackground", "Reference(EvidenceVariable)", "A reference to a EvidenceVariable resource that defines the population for the research.", 0, 1, exposureBackground);
1704        case -19675778: /*exposureVariant*/  return new Property("exposureVariant", "Reference(EvidenceVariable)", "A reference to a EvidenceVariable resource that defines the exposure for the research.", 0, java.lang.Integer.MAX_VALUE, exposureVariant);
1705        case -1106507950: /*outcome*/  return new Property("outcome", "Reference(EvidenceVariable)", "A reference to a EvidenceVariable resomece that defines the outcome for the research.", 0, java.lang.Integer.MAX_VALUE, outcome);
1706        default: return super.getNamedProperty(_hash, _name, _checkValid);
1707        }
1708
1709      }
1710
1711      @Override
1712      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1713        switch (hash) {
1714        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
1715        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1716        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
1717        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1718        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1719        case 1555503932: /*shortTitle*/ return this.shortTitle == null ? new Base[0] : new Base[] {this.shortTitle}; // StringType
1720        case -2060497896: /*subtitle*/ return this.subtitle == null ? new Base[0] : new Base[] {this.subtitle}; // StringType
1721        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
1722        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
1723        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
1724        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
1725        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
1726        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
1727        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
1728        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
1729        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
1730        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
1731        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
1732        case -403934648: /*effectivePeriod*/ return this.effectivePeriod == null ? new Base[0] : new Base[] {this.effectivePeriod}; // Period
1733        case 110546223: /*topic*/ return this.topic == null ? new Base[0] : this.topic.toArray(new Base[this.topic.size()]); // CodeableConcept
1734        case -1406328437: /*author*/ return this.author == null ? new Base[0] : this.author.toArray(new Base[this.author.size()]); // ContactDetail
1735        case -1307827859: /*editor*/ return this.editor == null ? new Base[0] : this.editor.toArray(new Base[this.editor.size()]); // ContactDetail
1736        case -261190139: /*reviewer*/ return this.reviewer == null ? new Base[0] : this.reviewer.toArray(new Base[this.reviewer.size()]); // ContactDetail
1737        case 1740277666: /*endorser*/ return this.endorser == null ? new Base[0] : this.endorser.toArray(new Base[this.endorser.size()]); // ContactDetail
1738        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
1739        case -832155243: /*exposureBackground*/ return this.exposureBackground == null ? new Base[0] : new Base[] {this.exposureBackground}; // Reference
1740        case -19675778: /*exposureVariant*/ return this.exposureVariant == null ? new Base[0] : this.exposureVariant.toArray(new Base[this.exposureVariant.size()]); // Reference
1741        case -1106507950: /*outcome*/ return this.outcome == null ? new Base[0] : this.outcome.toArray(new Base[this.outcome.size()]); // Reference
1742        default: return super.getProperty(hash, name, checkValid);
1743        }
1744
1745      }
1746
1747      @Override
1748      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1749        switch (hash) {
1750        case 116079: // url
1751          this.url = castToUri(value); // UriType
1752          return value;
1753        case -1618432855: // identifier
1754          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1755          return value;
1756        case 351608024: // version
1757          this.version = castToString(value); // StringType
1758          return value;
1759        case 3373707: // name
1760          this.name = castToString(value); // StringType
1761          return value;
1762        case 110371416: // title
1763          this.title = castToString(value); // StringType
1764          return value;
1765        case 1555503932: // shortTitle
1766          this.shortTitle = castToString(value); // StringType
1767          return value;
1768        case -2060497896: // subtitle
1769          this.subtitle = castToString(value); // StringType
1770          return value;
1771        case -892481550: // status
1772          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
1773          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
1774          return value;
1775        case 3076014: // date
1776          this.date = castToDateTime(value); // DateTimeType
1777          return value;
1778        case 1447404028: // publisher
1779          this.publisher = castToString(value); // StringType
1780          return value;
1781        case 951526432: // contact
1782          this.getContact().add(castToContactDetail(value)); // ContactDetail
1783          return value;
1784        case -1724546052: // description
1785          this.description = castToMarkdown(value); // MarkdownType
1786          return value;
1787        case 3387378: // note
1788          this.getNote().add(castToAnnotation(value)); // Annotation
1789          return value;
1790        case -669707736: // useContext
1791          this.getUseContext().add(castToUsageContext(value)); // UsageContext
1792          return value;
1793        case -507075711: // jurisdiction
1794          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
1795          return value;
1796        case 1522889671: // copyright
1797          this.copyright = castToMarkdown(value); // MarkdownType
1798          return value;
1799        case 223539345: // approvalDate
1800          this.approvalDate = castToDate(value); // DateType
1801          return value;
1802        case -1687512484: // lastReviewDate
1803          this.lastReviewDate = castToDate(value); // DateType
1804          return value;
1805        case -403934648: // effectivePeriod
1806          this.effectivePeriod = castToPeriod(value); // Period
1807          return value;
1808        case 110546223: // topic
1809          this.getTopic().add(castToCodeableConcept(value)); // CodeableConcept
1810          return value;
1811        case -1406328437: // author
1812          this.getAuthor().add(castToContactDetail(value)); // ContactDetail
1813          return value;
1814        case -1307827859: // editor
1815          this.getEditor().add(castToContactDetail(value)); // ContactDetail
1816          return value;
1817        case -261190139: // reviewer
1818          this.getReviewer().add(castToContactDetail(value)); // ContactDetail
1819          return value;
1820        case 1740277666: // endorser
1821          this.getEndorser().add(castToContactDetail(value)); // ContactDetail
1822          return value;
1823        case 666807069: // relatedArtifact
1824          this.getRelatedArtifact().add(castToRelatedArtifact(value)); // RelatedArtifact
1825          return value;
1826        case -832155243: // exposureBackground
1827          this.exposureBackground = castToReference(value); // Reference
1828          return value;
1829        case -19675778: // exposureVariant
1830          this.getExposureVariant().add(castToReference(value)); // Reference
1831          return value;
1832        case -1106507950: // outcome
1833          this.getOutcome().add(castToReference(value)); // Reference
1834          return value;
1835        default: return super.setProperty(hash, name, value);
1836        }
1837
1838      }
1839
1840      @Override
1841      public Base setProperty(String name, Base value) throws FHIRException {
1842        if (name.equals("url")) {
1843          this.url = castToUri(value); // UriType
1844        } else if (name.equals("identifier")) {
1845          this.getIdentifier().add(castToIdentifier(value));
1846        } else if (name.equals("version")) {
1847          this.version = castToString(value); // StringType
1848        } else if (name.equals("name")) {
1849          this.name = castToString(value); // StringType
1850        } else if (name.equals("title")) {
1851          this.title = castToString(value); // StringType
1852        } else if (name.equals("shortTitle")) {
1853          this.shortTitle = castToString(value); // StringType
1854        } else if (name.equals("subtitle")) {
1855          this.subtitle = castToString(value); // StringType
1856        } else if (name.equals("status")) {
1857          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
1858          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
1859        } else if (name.equals("date")) {
1860          this.date = castToDateTime(value); // DateTimeType
1861        } else if (name.equals("publisher")) {
1862          this.publisher = castToString(value); // StringType
1863        } else if (name.equals("contact")) {
1864          this.getContact().add(castToContactDetail(value));
1865        } else if (name.equals("description")) {
1866          this.description = castToMarkdown(value); // MarkdownType
1867        } else if (name.equals("note")) {
1868          this.getNote().add(castToAnnotation(value));
1869        } else if (name.equals("useContext")) {
1870          this.getUseContext().add(castToUsageContext(value));
1871        } else if (name.equals("jurisdiction")) {
1872          this.getJurisdiction().add(castToCodeableConcept(value));
1873        } else if (name.equals("copyright")) {
1874          this.copyright = castToMarkdown(value); // MarkdownType
1875        } else if (name.equals("approvalDate")) {
1876          this.approvalDate = castToDate(value); // DateType
1877        } else if (name.equals("lastReviewDate")) {
1878          this.lastReviewDate = castToDate(value); // DateType
1879        } else if (name.equals("effectivePeriod")) {
1880          this.effectivePeriod = castToPeriod(value); // Period
1881        } else if (name.equals("topic")) {
1882          this.getTopic().add(castToCodeableConcept(value));
1883        } else if (name.equals("author")) {
1884          this.getAuthor().add(castToContactDetail(value));
1885        } else if (name.equals("editor")) {
1886          this.getEditor().add(castToContactDetail(value));
1887        } else if (name.equals("reviewer")) {
1888          this.getReviewer().add(castToContactDetail(value));
1889        } else if (name.equals("endorser")) {
1890          this.getEndorser().add(castToContactDetail(value));
1891        } else if (name.equals("relatedArtifact")) {
1892          this.getRelatedArtifact().add(castToRelatedArtifact(value));
1893        } else if (name.equals("exposureBackground")) {
1894          this.exposureBackground = castToReference(value); // Reference
1895        } else if (name.equals("exposureVariant")) {
1896          this.getExposureVariant().add(castToReference(value));
1897        } else if (name.equals("outcome")) {
1898          this.getOutcome().add(castToReference(value));
1899        } else
1900          return super.setProperty(name, value);
1901        return value;
1902      }
1903
1904      @Override
1905      public Base makeProperty(int hash, String name) throws FHIRException {
1906        switch (hash) {
1907        case 116079:  return getUrlElement();
1908        case -1618432855:  return addIdentifier(); 
1909        case 351608024:  return getVersionElement();
1910        case 3373707:  return getNameElement();
1911        case 110371416:  return getTitleElement();
1912        case 1555503932:  return getShortTitleElement();
1913        case -2060497896:  return getSubtitleElement();
1914        case -892481550:  return getStatusElement();
1915        case 3076014:  return getDateElement();
1916        case 1447404028:  return getPublisherElement();
1917        case 951526432:  return addContact(); 
1918        case -1724546052:  return getDescriptionElement();
1919        case 3387378:  return addNote(); 
1920        case -669707736:  return addUseContext(); 
1921        case -507075711:  return addJurisdiction(); 
1922        case 1522889671:  return getCopyrightElement();
1923        case 223539345:  return getApprovalDateElement();
1924        case -1687512484:  return getLastReviewDateElement();
1925        case -403934648:  return getEffectivePeriod(); 
1926        case 110546223:  return addTopic(); 
1927        case -1406328437:  return addAuthor(); 
1928        case -1307827859:  return addEditor(); 
1929        case -261190139:  return addReviewer(); 
1930        case 1740277666:  return addEndorser(); 
1931        case 666807069:  return addRelatedArtifact(); 
1932        case -832155243:  return getExposureBackground(); 
1933        case -19675778:  return addExposureVariant(); 
1934        case -1106507950:  return addOutcome(); 
1935        default: return super.makeProperty(hash, name);
1936        }
1937
1938      }
1939
1940      @Override
1941      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1942        switch (hash) {
1943        case 116079: /*url*/ return new String[] {"uri"};
1944        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1945        case 351608024: /*version*/ return new String[] {"string"};
1946        case 3373707: /*name*/ return new String[] {"string"};
1947        case 110371416: /*title*/ return new String[] {"string"};
1948        case 1555503932: /*shortTitle*/ return new String[] {"string"};
1949        case -2060497896: /*subtitle*/ return new String[] {"string"};
1950        case -892481550: /*status*/ return new String[] {"code"};
1951        case 3076014: /*date*/ return new String[] {"dateTime"};
1952        case 1447404028: /*publisher*/ return new String[] {"string"};
1953        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
1954        case -1724546052: /*description*/ return new String[] {"markdown"};
1955        case 3387378: /*note*/ return new String[] {"Annotation"};
1956        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
1957        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
1958        case 1522889671: /*copyright*/ return new String[] {"markdown"};
1959        case 223539345: /*approvalDate*/ return new String[] {"date"};
1960        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
1961        case -403934648: /*effectivePeriod*/ return new String[] {"Period"};
1962        case 110546223: /*topic*/ return new String[] {"CodeableConcept"};
1963        case -1406328437: /*author*/ return new String[] {"ContactDetail"};
1964        case -1307827859: /*editor*/ return new String[] {"ContactDetail"};
1965        case -261190139: /*reviewer*/ return new String[] {"ContactDetail"};
1966        case 1740277666: /*endorser*/ return new String[] {"ContactDetail"};
1967        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
1968        case -832155243: /*exposureBackground*/ return new String[] {"Reference"};
1969        case -19675778: /*exposureVariant*/ return new String[] {"Reference"};
1970        case -1106507950: /*outcome*/ return new String[] {"Reference"};
1971        default: return super.getTypesForProperty(hash, name);
1972        }
1973
1974      }
1975
1976      @Override
1977      public Base addChild(String name) throws FHIRException {
1978        if (name.equals("url")) {
1979          throw new FHIRException("Cannot call addChild on a primitive type Evidence.url");
1980        }
1981        else if (name.equals("identifier")) {
1982          return addIdentifier();
1983        }
1984        else if (name.equals("version")) {
1985          throw new FHIRException("Cannot call addChild on a primitive type Evidence.version");
1986        }
1987        else if (name.equals("name")) {
1988          throw new FHIRException("Cannot call addChild on a primitive type Evidence.name");
1989        }
1990        else if (name.equals("title")) {
1991          throw new FHIRException("Cannot call addChild on a primitive type Evidence.title");
1992        }
1993        else if (name.equals("shortTitle")) {
1994          throw new FHIRException("Cannot call addChild on a primitive type Evidence.shortTitle");
1995        }
1996        else if (name.equals("subtitle")) {
1997          throw new FHIRException("Cannot call addChild on a primitive type Evidence.subtitle");
1998        }
1999        else if (name.equals("status")) {
2000          throw new FHIRException("Cannot call addChild on a primitive type Evidence.status");
2001        }
2002        else if (name.equals("date")) {
2003          throw new FHIRException("Cannot call addChild on a primitive type Evidence.date");
2004        }
2005        else if (name.equals("publisher")) {
2006          throw new FHIRException("Cannot call addChild on a primitive type Evidence.publisher");
2007        }
2008        else if (name.equals("contact")) {
2009          return addContact();
2010        }
2011        else if (name.equals("description")) {
2012          throw new FHIRException("Cannot call addChild on a primitive type Evidence.description");
2013        }
2014        else if (name.equals("note")) {
2015          return addNote();
2016        }
2017        else if (name.equals("useContext")) {
2018          return addUseContext();
2019        }
2020        else if (name.equals("jurisdiction")) {
2021          return addJurisdiction();
2022        }
2023        else if (name.equals("copyright")) {
2024          throw new FHIRException("Cannot call addChild on a primitive type Evidence.copyright");
2025        }
2026        else if (name.equals("approvalDate")) {
2027          throw new FHIRException("Cannot call addChild on a primitive type Evidence.approvalDate");
2028        }
2029        else if (name.equals("lastReviewDate")) {
2030          throw new FHIRException("Cannot call addChild on a primitive type Evidence.lastReviewDate");
2031        }
2032        else if (name.equals("effectivePeriod")) {
2033          this.effectivePeriod = new Period();
2034          return this.effectivePeriod;
2035        }
2036        else if (name.equals("topic")) {
2037          return addTopic();
2038        }
2039        else if (name.equals("author")) {
2040          return addAuthor();
2041        }
2042        else if (name.equals("editor")) {
2043          return addEditor();
2044        }
2045        else if (name.equals("reviewer")) {
2046          return addReviewer();
2047        }
2048        else if (name.equals("endorser")) {
2049          return addEndorser();
2050        }
2051        else if (name.equals("relatedArtifact")) {
2052          return addRelatedArtifact();
2053        }
2054        else if (name.equals("exposureBackground")) {
2055          this.exposureBackground = new Reference();
2056          return this.exposureBackground;
2057        }
2058        else if (name.equals("exposureVariant")) {
2059          return addExposureVariant();
2060        }
2061        else if (name.equals("outcome")) {
2062          return addOutcome();
2063        }
2064        else
2065          return super.addChild(name);
2066      }
2067
2068  public String fhirType() {
2069    return "Evidence";
2070
2071  }
2072
2073      public Evidence copy() {
2074        Evidence dst = new Evidence();
2075        copyValues(dst);
2076        return dst;
2077      }
2078
2079      public void copyValues(Evidence dst) {
2080        super.copyValues(dst);
2081        dst.url = url == null ? null : url.copy();
2082        if (identifier != null) {
2083          dst.identifier = new ArrayList<Identifier>();
2084          for (Identifier i : identifier)
2085            dst.identifier.add(i.copy());
2086        };
2087        dst.version = version == null ? null : version.copy();
2088        dst.name = name == null ? null : name.copy();
2089        dst.title = title == null ? null : title.copy();
2090        dst.shortTitle = shortTitle == null ? null : shortTitle.copy();
2091        dst.subtitle = subtitle == null ? null : subtitle.copy();
2092        dst.status = status == null ? null : status.copy();
2093        dst.date = date == null ? null : date.copy();
2094        dst.publisher = publisher == null ? null : publisher.copy();
2095        if (contact != null) {
2096          dst.contact = new ArrayList<ContactDetail>();
2097          for (ContactDetail i : contact)
2098            dst.contact.add(i.copy());
2099        };
2100        dst.description = description == null ? null : description.copy();
2101        if (note != null) {
2102          dst.note = new ArrayList<Annotation>();
2103          for (Annotation i : note)
2104            dst.note.add(i.copy());
2105        };
2106        if (useContext != null) {
2107          dst.useContext = new ArrayList<UsageContext>();
2108          for (UsageContext i : useContext)
2109            dst.useContext.add(i.copy());
2110        };
2111        if (jurisdiction != null) {
2112          dst.jurisdiction = new ArrayList<CodeableConcept>();
2113          for (CodeableConcept i : jurisdiction)
2114            dst.jurisdiction.add(i.copy());
2115        };
2116        dst.copyright = copyright == null ? null : copyright.copy();
2117        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
2118        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
2119        dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
2120        if (topic != null) {
2121          dst.topic = new ArrayList<CodeableConcept>();
2122          for (CodeableConcept i : topic)
2123            dst.topic.add(i.copy());
2124        };
2125        if (author != null) {
2126          dst.author = new ArrayList<ContactDetail>();
2127          for (ContactDetail i : author)
2128            dst.author.add(i.copy());
2129        };
2130        if (editor != null) {
2131          dst.editor = new ArrayList<ContactDetail>();
2132          for (ContactDetail i : editor)
2133            dst.editor.add(i.copy());
2134        };
2135        if (reviewer != null) {
2136          dst.reviewer = new ArrayList<ContactDetail>();
2137          for (ContactDetail i : reviewer)
2138            dst.reviewer.add(i.copy());
2139        };
2140        if (endorser != null) {
2141          dst.endorser = new ArrayList<ContactDetail>();
2142          for (ContactDetail i : endorser)
2143            dst.endorser.add(i.copy());
2144        };
2145        if (relatedArtifact != null) {
2146          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
2147          for (RelatedArtifact i : relatedArtifact)
2148            dst.relatedArtifact.add(i.copy());
2149        };
2150        dst.exposureBackground = exposureBackground == null ? null : exposureBackground.copy();
2151        if (exposureVariant != null) {
2152          dst.exposureVariant = new ArrayList<Reference>();
2153          for (Reference i : exposureVariant)
2154            dst.exposureVariant.add(i.copy());
2155        };
2156        if (outcome != null) {
2157          dst.outcome = new ArrayList<Reference>();
2158          for (Reference i : outcome)
2159            dst.outcome.add(i.copy());
2160        };
2161      }
2162
2163      protected Evidence typedCopy() {
2164        return copy();
2165      }
2166
2167      @Override
2168      public boolean equalsDeep(Base other_) {
2169        if (!super.equalsDeep(other_))
2170          return false;
2171        if (!(other_ instanceof Evidence))
2172          return false;
2173        Evidence o = (Evidence) other_;
2174        return compareDeep(identifier, o.identifier, true) && compareDeep(shortTitle, o.shortTitle, true)
2175           && compareDeep(subtitle, o.subtitle, true) && compareDeep(note, o.note, true) && compareDeep(copyright, o.copyright, true)
2176           && compareDeep(approvalDate, o.approvalDate, true) && compareDeep(lastReviewDate, o.lastReviewDate, true)
2177           && compareDeep(effectivePeriod, o.effectivePeriod, true) && compareDeep(topic, o.topic, true) && compareDeep(author, o.author, true)
2178           && compareDeep(editor, o.editor, true) && compareDeep(reviewer, o.reviewer, true) && compareDeep(endorser, o.endorser, true)
2179           && compareDeep(relatedArtifact, o.relatedArtifact, true) && compareDeep(exposureBackground, o.exposureBackground, true)
2180           && compareDeep(exposureVariant, o.exposureVariant, true) && compareDeep(outcome, o.outcome, true)
2181          ;
2182      }
2183
2184      @Override
2185      public boolean equalsShallow(Base other_) {
2186        if (!super.equalsShallow(other_))
2187          return false;
2188        if (!(other_ instanceof Evidence))
2189          return false;
2190        Evidence o = (Evidence) other_;
2191        return compareValues(shortTitle, o.shortTitle, true) && compareValues(subtitle, o.subtitle, true) && compareValues(copyright, o.copyright, true)
2192           && compareValues(approvalDate, o.approvalDate, true) && compareValues(lastReviewDate, o.lastReviewDate, true)
2193          ;
2194      }
2195
2196      public boolean isEmpty() {
2197        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, shortTitle, subtitle
2198          , note, copyright, approvalDate, lastReviewDate, effectivePeriod, topic, author
2199          , editor, reviewer, endorser, relatedArtifact, exposureBackground, exposureVariant
2200          , outcome);
2201      }
2202
2203  @Override
2204  public ResourceType getResourceType() {
2205    return ResourceType.Evidence;
2206   }
2207
2208 /**
2209   * Search parameter: <b>date</b>
2210   * <p>
2211   * Description: <b>The evidence publication date</b><br>
2212   * Type: <b>date</b><br>
2213   * Path: <b>Evidence.date</b><br>
2214   * </p>
2215   */
2216  @SearchParamDefinition(name="date", path="Evidence.date", description="The evidence publication date", type="date" )
2217  public static final String SP_DATE = "date";
2218 /**
2219   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2220   * <p>
2221   * Description: <b>The evidence publication date</b><br>
2222   * Type: <b>date</b><br>
2223   * Path: <b>Evidence.date</b><br>
2224   * </p>
2225   */
2226  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2227
2228 /**
2229   * Search parameter: <b>identifier</b>
2230   * <p>
2231   * Description: <b>External identifier for the evidence</b><br>
2232   * Type: <b>token</b><br>
2233   * Path: <b>Evidence.identifier</b><br>
2234   * </p>
2235   */
2236  @SearchParamDefinition(name="identifier", path="Evidence.identifier", description="External identifier for the evidence", type="token" )
2237  public static final String SP_IDENTIFIER = "identifier";
2238 /**
2239   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2240   * <p>
2241   * Description: <b>External identifier for the evidence</b><br>
2242   * Type: <b>token</b><br>
2243   * Path: <b>Evidence.identifier</b><br>
2244   * </p>
2245   */
2246  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2247
2248 /**
2249   * Search parameter: <b>successor</b>
2250   * <p>
2251   * Description: <b>What resource is being referenced</b><br>
2252   * Type: <b>reference</b><br>
2253   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2254   * </p>
2255   */
2256  @SearchParamDefinition(name="successor", path="Evidence.relatedArtifact.where(type='successor').resource", description="What resource is being referenced", type="reference" )
2257  public static final String SP_SUCCESSOR = "successor";
2258 /**
2259   * <b>Fluent Client</b> search parameter constant for <b>successor</b>
2260   * <p>
2261   * Description: <b>What resource is being referenced</b><br>
2262   * Type: <b>reference</b><br>
2263   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2264   * </p>
2265   */
2266  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUCCESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUCCESSOR);
2267
2268/**
2269   * Constant for fluent queries to be used to add include statements. Specifies
2270   * the path value of "<b>Evidence:successor</b>".
2271   */
2272  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUCCESSOR = new ca.uhn.fhir.model.api.Include("Evidence:successor").toLocked();
2273
2274 /**
2275   * Search parameter: <b>context-type-value</b>
2276   * <p>
2277   * Description: <b>A use context type and value assigned to the evidence</b><br>
2278   * Type: <b>composite</b><br>
2279   * Path: <b></b><br>
2280   * </p>
2281   */
2282  @SearchParamDefinition(name="context-type-value", path="Evidence.useContext", description="A use context type and value assigned to the evidence", type="composite", compositeOf={"context-type", "context"} )
2283  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
2284 /**
2285   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
2286   * <p>
2287   * Description: <b>A use context type and value assigned to the evidence</b><br>
2288   * Type: <b>composite</b><br>
2289   * Path: <b></b><br>
2290   * </p>
2291   */
2292  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CONTEXT_TYPE_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_CONTEXT_TYPE_VALUE);
2293
2294 /**
2295   * Search parameter: <b>jurisdiction</b>
2296   * <p>
2297   * Description: <b>Intended jurisdiction for the evidence</b><br>
2298   * Type: <b>token</b><br>
2299   * Path: <b>Evidence.jurisdiction</b><br>
2300   * </p>
2301   */
2302  @SearchParamDefinition(name="jurisdiction", path="Evidence.jurisdiction", description="Intended jurisdiction for the evidence", type="token" )
2303  public static final String SP_JURISDICTION = "jurisdiction";
2304 /**
2305   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
2306   * <p>
2307   * Description: <b>Intended jurisdiction for the evidence</b><br>
2308   * Type: <b>token</b><br>
2309   * Path: <b>Evidence.jurisdiction</b><br>
2310   * </p>
2311   */
2312  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
2313
2314 /**
2315   * Search parameter: <b>description</b>
2316   * <p>
2317   * Description: <b>The description of the evidence</b><br>
2318   * Type: <b>string</b><br>
2319   * Path: <b>Evidence.description</b><br>
2320   * </p>
2321   */
2322  @SearchParamDefinition(name="description", path="Evidence.description", description="The description of the evidence", type="string" )
2323  public static final String SP_DESCRIPTION = "description";
2324 /**
2325   * <b>Fluent Client</b> search parameter constant for <b>description</b>
2326   * <p>
2327   * Description: <b>The description of the evidence</b><br>
2328   * Type: <b>string</b><br>
2329   * Path: <b>Evidence.description</b><br>
2330   * </p>
2331   */
2332  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
2333
2334 /**
2335   * Search parameter: <b>derived-from</b>
2336   * <p>
2337   * Description: <b>What resource is being referenced</b><br>
2338   * Type: <b>reference</b><br>
2339   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2340   * </p>
2341   */
2342  @SearchParamDefinition(name="derived-from", path="Evidence.relatedArtifact.where(type='derived-from').resource", description="What resource is being referenced", type="reference" )
2343  public static final String SP_DERIVED_FROM = "derived-from";
2344 /**
2345   * <b>Fluent Client</b> search parameter constant for <b>derived-from</b>
2346   * <p>
2347   * Description: <b>What resource is being referenced</b><br>
2348   * Type: <b>reference</b><br>
2349   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2350   * </p>
2351   */
2352  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DERIVED_FROM = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DERIVED_FROM);
2353
2354/**
2355   * Constant for fluent queries to be used to add include statements. Specifies
2356   * the path value of "<b>Evidence:derived-from</b>".
2357   */
2358  public static final ca.uhn.fhir.model.api.Include INCLUDE_DERIVED_FROM = new ca.uhn.fhir.model.api.Include("Evidence:derived-from").toLocked();
2359
2360 /**
2361   * Search parameter: <b>context-type</b>
2362   * <p>
2363   * Description: <b>A type of use context assigned to the evidence</b><br>
2364   * Type: <b>token</b><br>
2365   * Path: <b>Evidence.useContext.code</b><br>
2366   * </p>
2367   */
2368  @SearchParamDefinition(name="context-type", path="Evidence.useContext.code", description="A type of use context assigned to the evidence", type="token" )
2369  public static final String SP_CONTEXT_TYPE = "context-type";
2370 /**
2371   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
2372   * <p>
2373   * Description: <b>A type of use context assigned to the evidence</b><br>
2374   * Type: <b>token</b><br>
2375   * Path: <b>Evidence.useContext.code</b><br>
2376   * </p>
2377   */
2378  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
2379
2380 /**
2381   * Search parameter: <b>predecessor</b>
2382   * <p>
2383   * Description: <b>What resource is being referenced</b><br>
2384   * Type: <b>reference</b><br>
2385   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2386   * </p>
2387   */
2388  @SearchParamDefinition(name="predecessor", path="Evidence.relatedArtifact.where(type='predecessor').resource", description="What resource is being referenced", type="reference" )
2389  public static final String SP_PREDECESSOR = "predecessor";
2390 /**
2391   * <b>Fluent Client</b> search parameter constant for <b>predecessor</b>
2392   * <p>
2393   * Description: <b>What resource is being referenced</b><br>
2394   * Type: <b>reference</b><br>
2395   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2396   * </p>
2397   */
2398  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PREDECESSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PREDECESSOR);
2399
2400/**
2401   * Constant for fluent queries to be used to add include statements. Specifies
2402   * the path value of "<b>Evidence:predecessor</b>".
2403   */
2404  public static final ca.uhn.fhir.model.api.Include INCLUDE_PREDECESSOR = new ca.uhn.fhir.model.api.Include("Evidence:predecessor").toLocked();
2405
2406 /**
2407   * Search parameter: <b>title</b>
2408   * <p>
2409   * Description: <b>The human-friendly name of the evidence</b><br>
2410   * Type: <b>string</b><br>
2411   * Path: <b>Evidence.title</b><br>
2412   * </p>
2413   */
2414  @SearchParamDefinition(name="title", path="Evidence.title", description="The human-friendly name of the evidence", type="string" )
2415  public static final String SP_TITLE = "title";
2416 /**
2417   * <b>Fluent Client</b> search parameter constant for <b>title</b>
2418   * <p>
2419   * Description: <b>The human-friendly name of the evidence</b><br>
2420   * Type: <b>string</b><br>
2421   * Path: <b>Evidence.title</b><br>
2422   * </p>
2423   */
2424  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
2425
2426 /**
2427   * Search parameter: <b>composed-of</b>
2428   * <p>
2429   * Description: <b>What resource is being referenced</b><br>
2430   * Type: <b>reference</b><br>
2431   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2432   * </p>
2433   */
2434  @SearchParamDefinition(name="composed-of", path="Evidence.relatedArtifact.where(type='composed-of').resource", description="What resource is being referenced", type="reference" )
2435  public static final String SP_COMPOSED_OF = "composed-of";
2436 /**
2437   * <b>Fluent Client</b> search parameter constant for <b>composed-of</b>
2438   * <p>
2439   * Description: <b>What resource is being referenced</b><br>
2440   * Type: <b>reference</b><br>
2441   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2442   * </p>
2443   */
2444  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam COMPOSED_OF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_COMPOSED_OF);
2445
2446/**
2447   * Constant for fluent queries to be used to add include statements. Specifies
2448   * the path value of "<b>Evidence:composed-of</b>".
2449   */
2450  public static final ca.uhn.fhir.model.api.Include INCLUDE_COMPOSED_OF = new ca.uhn.fhir.model.api.Include("Evidence:composed-of").toLocked();
2451
2452 /**
2453   * Search parameter: <b>version</b>
2454   * <p>
2455   * Description: <b>The business version of the evidence</b><br>
2456   * Type: <b>token</b><br>
2457   * Path: <b>Evidence.version</b><br>
2458   * </p>
2459   */
2460  @SearchParamDefinition(name="version", path="Evidence.version", description="The business version of the evidence", type="token" )
2461  public static final String SP_VERSION = "version";
2462 /**
2463   * <b>Fluent Client</b> search parameter constant for <b>version</b>
2464   * <p>
2465   * Description: <b>The business version of the evidence</b><br>
2466   * Type: <b>token</b><br>
2467   * Path: <b>Evidence.version</b><br>
2468   * </p>
2469   */
2470  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
2471
2472 /**
2473   * Search parameter: <b>url</b>
2474   * <p>
2475   * Description: <b>The uri that identifies the evidence</b><br>
2476   * Type: <b>uri</b><br>
2477   * Path: <b>Evidence.url</b><br>
2478   * </p>
2479   */
2480  @SearchParamDefinition(name="url", path="Evidence.url", description="The uri that identifies the evidence", type="uri" )
2481  public static final String SP_URL = "url";
2482 /**
2483   * <b>Fluent Client</b> search parameter constant for <b>url</b>
2484   * <p>
2485   * Description: <b>The uri that identifies the evidence</b><br>
2486   * Type: <b>uri</b><br>
2487   * Path: <b>Evidence.url</b><br>
2488   * </p>
2489   */
2490  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
2491
2492 /**
2493   * Search parameter: <b>context-quantity</b>
2494   * <p>
2495   * Description: <b>A quantity- or range-valued use context assigned to the evidence</b><br>
2496   * Type: <b>quantity</b><br>
2497   * Path: <b>Evidence.useContext.valueQuantity, Evidence.useContext.valueRange</b><br>
2498   * </p>
2499   */
2500  @SearchParamDefinition(name="context-quantity", path="(Evidence.useContext.value as Quantity) | (Evidence.useContext.value as Range)", description="A quantity- or range-valued use context assigned to the evidence", type="quantity" )
2501  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
2502 /**
2503   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
2504   * <p>
2505   * Description: <b>A quantity- or range-valued use context assigned to the evidence</b><br>
2506   * Type: <b>quantity</b><br>
2507   * Path: <b>Evidence.useContext.valueQuantity, Evidence.useContext.valueRange</b><br>
2508   * </p>
2509   */
2510  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
2511
2512 /**
2513   * Search parameter: <b>effective</b>
2514   * <p>
2515   * Description: <b>The time during which the evidence is intended to be in use</b><br>
2516   * Type: <b>date</b><br>
2517   * Path: <b>Evidence.effectivePeriod</b><br>
2518   * </p>
2519   */
2520  @SearchParamDefinition(name="effective", path="Evidence.effectivePeriod", description="The time during which the evidence is intended to be in use", type="date" )
2521  public static final String SP_EFFECTIVE = "effective";
2522 /**
2523   * <b>Fluent Client</b> search parameter constant for <b>effective</b>
2524   * <p>
2525   * Description: <b>The time during which the evidence is intended to be in use</b><br>
2526   * Type: <b>date</b><br>
2527   * Path: <b>Evidence.effectivePeriod</b><br>
2528   * </p>
2529   */
2530  public static final ca.uhn.fhir.rest.gclient.DateClientParam EFFECTIVE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_EFFECTIVE);
2531
2532 /**
2533   * Search parameter: <b>depends-on</b>
2534   * <p>
2535   * Description: <b>What resource is being referenced</b><br>
2536   * Type: <b>reference</b><br>
2537   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2538   * </p>
2539   */
2540  @SearchParamDefinition(name="depends-on", path="Evidence.relatedArtifact.where(type='depends-on').resource", description="What resource is being referenced", type="reference" )
2541  public static final String SP_DEPENDS_ON = "depends-on";
2542 /**
2543   * <b>Fluent Client</b> search parameter constant for <b>depends-on</b>
2544   * <p>
2545   * Description: <b>What resource is being referenced</b><br>
2546   * Type: <b>reference</b><br>
2547   * Path: <b>Evidence.relatedArtifact.resource</b><br>
2548   * </p>
2549   */
2550  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEPENDS_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DEPENDS_ON);
2551
2552/**
2553   * Constant for fluent queries to be used to add include statements. Specifies
2554   * the path value of "<b>Evidence:depends-on</b>".
2555   */
2556  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEPENDS_ON = new ca.uhn.fhir.model.api.Include("Evidence:depends-on").toLocked();
2557
2558 /**
2559   * Search parameter: <b>name</b>
2560   * <p>
2561   * Description: <b>Computationally friendly name of the evidence</b><br>
2562   * Type: <b>string</b><br>
2563   * Path: <b>Evidence.name</b><br>
2564   * </p>
2565   */
2566  @SearchParamDefinition(name="name", path="Evidence.name", description="Computationally friendly name of the evidence", type="string" )
2567  public static final String SP_NAME = "name";
2568 /**
2569   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2570   * <p>
2571   * Description: <b>Computationally friendly name of the evidence</b><br>
2572   * Type: <b>string</b><br>
2573   * Path: <b>Evidence.name</b><br>
2574   * </p>
2575   */
2576  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2577
2578 /**
2579   * Search parameter: <b>context</b>
2580   * <p>
2581   * Description: <b>A use context assigned to the evidence</b><br>
2582   * Type: <b>token</b><br>
2583   * Path: <b>Evidence.useContext.valueCodeableConcept</b><br>
2584   * </p>
2585   */
2586  @SearchParamDefinition(name="context", path="(Evidence.useContext.value as CodeableConcept)", description="A use context assigned to the evidence", type="token" )
2587  public static final String SP_CONTEXT = "context";
2588 /**
2589   * <b>Fluent Client</b> search parameter constant for <b>context</b>
2590   * <p>
2591   * Description: <b>A use context assigned to the evidence</b><br>
2592   * Type: <b>token</b><br>
2593   * Path: <b>Evidence.useContext.valueCodeableConcept</b><br>
2594   * </p>
2595   */
2596  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
2597
2598 /**
2599   * Search parameter: <b>publisher</b>
2600   * <p>
2601   * Description: <b>Name of the publisher of the evidence</b><br>
2602   * Type: <b>string</b><br>
2603   * Path: <b>Evidence.publisher</b><br>
2604   * </p>
2605   */
2606  @SearchParamDefinition(name="publisher", path="Evidence.publisher", description="Name of the publisher of the evidence", type="string" )
2607  public static final String SP_PUBLISHER = "publisher";
2608 /**
2609   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
2610   * <p>
2611   * Description: <b>Name of the publisher of the evidence</b><br>
2612   * Type: <b>string</b><br>
2613   * Path: <b>Evidence.publisher</b><br>
2614   * </p>
2615   */
2616  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
2617
2618 /**
2619   * Search parameter: <b>topic</b>
2620   * <p>
2621   * Description: <b>Topics associated with the Evidence</b><br>
2622   * Type: <b>token</b><br>
2623   * Path: <b>Evidence.topic</b><br>
2624   * </p>
2625   */
2626  @SearchParamDefinition(name="topic", path="Evidence.topic", description="Topics associated with the Evidence", type="token" )
2627  public static final String SP_TOPIC = "topic";
2628 /**
2629   * <b>Fluent Client</b> search parameter constant for <b>topic</b>
2630   * <p>
2631   * Description: <b>Topics associated with the Evidence</b><br>
2632   * Type: <b>token</b><br>
2633   * Path: <b>Evidence.topic</b><br>
2634   * </p>
2635   */
2636  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TOPIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TOPIC);
2637
2638 /**
2639   * Search parameter: <b>context-type-quantity</b>
2640   * <p>
2641   * Description: <b>A use context type and quantity- or range-based value assigned to the evidence</b><br>
2642   * Type: <b>composite</b><br>
2643   * Path: <b></b><br>
2644   * </p>
2645   */
2646  @SearchParamDefinition(name="context-type-quantity", path="Evidence.useContext", description="A use context type and quantity- or range-based value assigned to the evidence", type="composite", compositeOf={"context-type", "context-quantity"} )
2647  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
2648 /**
2649   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
2650   * <p>
2651   * Description: <b>A use context type and quantity- or range-based value assigned to the evidence</b><br>
2652   * Type: <b>composite</b><br>
2653   * Path: <b></b><br>
2654   * </p>
2655   */
2656  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> CONTEXT_TYPE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(SP_CONTEXT_TYPE_QUANTITY);
2657
2658 /**
2659   * Search parameter: <b>status</b>
2660   * <p>
2661   * Description: <b>The current status of the evidence</b><br>
2662   * Type: <b>token</b><br>
2663   * Path: <b>Evidence.status</b><br>
2664   * </p>
2665   */
2666  @SearchParamDefinition(name="status", path="Evidence.status", description="The current status of the evidence", type="token" )
2667  public static final String SP_STATUS = "status";
2668 /**
2669   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2670   * <p>
2671   * Description: <b>The current status of the evidence</b><br>
2672   * Type: <b>token</b><br>
2673   * Path: <b>Evidence.status</b><br>
2674   * </p>
2675   */
2676  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2677
2678
2679}